Update README.

This commit is contained in:
Blaž Hrastnik 2020-10-05 16:12:55 +09:00
parent 04b1546634
commit 0926904d4c

View File

@ -7,18 +7,28 @@ # Helix
| helix-view | UI abstractions for use in backends, imperative shell. | | helix-view | UI abstractions for use in backends, imperative shell. |
| helix-term | Terminal UI | | helix-term | Terminal UI |
# Installation
```
git clone --depth 1 --recurse-submodules -j8 https://github.com/helix-editor/helix
cd helix
cargo install --path helix-term
```
This will install the `hx` binary to `$HOME/.cargo/bin`.
# Notes
- server-client architecture via gRPC, UI separate from core - server-client architecture via gRPC, UI separate from core
- multi cursor based editing and slicing - multi cursor based editing and slicing
- WASM based plugins (builtin LSP & fuzzy file finder) - WASM based plugins (builtin LSP & fuzzy file finder)
- piece table-based tree structure for changes
Structure similar to codemirror: Structure similar to codemirror:
text (ropes) - text (ropes)
- column utils, stuff like tab aware (row, col) -> char pos translation - column utils, stuff like tab aware (row, col) -> char pos translation
- word/grapheme/code point utils and iterators - word/grapheme/code point utils and iterators
state - state
- transactions - transactions
- changes - changes
- annotations (time changed etc) - annotations (time changed etc)
@ -29,62 +39,51 @@ # Helix
- cursor is just a single range selection - cursor is just a single range selection
- markers - markers
track a position inside text that synchronizes with edits track a position inside text that synchronizes with edits
{ doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before } - { doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
view (actual UI) - view (actual UI)
- renders via termwiz - renders via termwiz
- viewport(Lines) -> what's actually visible - viewport(Lines) -> what's actually visible
- extend the view via Decorations (inline styling) or Components (UI) - extend the view via Decorations (inline styling) or Components (UI)
- mark / wieget / line / replace decoration - mark / wieget / line / replace decoration
commands (transform state) - commands (transform state)
- movement - movement
- selection extension - selection extension
- deletion - deletion
- indentation - indentation
keymap (maps keys to commands) - keymap (maps keys to commands)
history (undo tree via immutable ropes) - history (undo tree via immutable ropes)
- undoes transactions - undoes transactions
- invert changes (generates a revert) - invert changes (generates a revert)
(collab mode) - (collab mode)
gutter (line numbers, diagnostic marker, etc) -> ties into UI components - gutter (line numbers, diagnostic marker, etc) -> ties into UI components
rangeset/span -> mappable over changes (can be a marker primitive?) - rangeset/span -> mappable over changes (can be a marker primitive?)
syntax (treesitter) - syntax (treesitter)
- indentation strategies - indentation strategies
fold - fold
selections (select mode/multiselect) - selections (select mode/multiselect)
matchbrackets - matchbrackets
closebrackets - closebrackets
special-chars (shows dots etc for specials) - special-chars (shows dots etc for specials)
panel (for UI: file pickers, search dialogs, etc) - panel (for UI: file pickers, search dialogs, etc)
tooltip (for UI) - tooltip (for UI)
search (regex? pcre) - search (regex? pcre)
lint (async linters) - lint (async linters)
lsp - lsp
highlight (?) - highlight (?)
stream-syntax - stream-syntax
autocomplete - autocomplete
comment (gc, etc for auto commenting) - comment (gc, etc for auto commenting)
snippets - snippets
- terminal mode?
terminal mode? - plugins can contain more commands/ui abstractions to use elsewhere
- languageData as presets for each language (syntax, indent, comment, etc)
plugins can contain more commands/ui abstractions to use elsewhere Vim stuff:
- motions/operators/text objects
languageData as presets for each language (syntax, indent, comment, etc) - full visual mode
- macros
TODO: determine rust vs script portions - jump lists
- marks
vim stuff: - yank/paste
motions/operators/text objects - conceal for markdown markers, etc
full visual mode
macros
jump lists
marks
yank/paste
conceal for markdown markers, etc
---
codemirror uses offsets exclusively with Line being computed when necessary
(with start/end extents)
lines are temporarily cached in a lineCache