@@ -7,18 +7,28 @@
77| helix-view | UI abstractions for use in backends, imperative shell. |
88| helix-term | Terminal UI |
99
10+# Installation
11+
12+```
13+git clone --depth 1 --recurse-submodules -j8 https://github.com/helix-editor/helix
14+cd helix
15+cargo install --path helix-term
16+```
17+
18+This will install the `hx` binary to `$HOME/.cargo/bin`.
19+
20+# Notes
21+
1022- server-client architecture via gRPC, UI separate from core
1123- multi cursor based editing and slicing
1224- WASM based plugins (builtin LSP & fuzzy file finder)
13−- piece table-based tree structure for changes
14−
1525
1626Structure similar to codemirror:
1727
18−text (ropes)
28+- text (ropes)
1929- column utils, stuff like tab aware (row, col) -> char pos translation
2030- word/grapheme/code point utils and iterators
21−state
31+- state
2232- transactions
2333 - changes
2434 - annotations (time changed etc)
@@ -29,62 +39,51 @@ state
2939 - cursor is just a single range selection
3040- markers
3141 track a position inside text that synchronizes with edits
32−{ doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
33−view (actual UI)
42+- { doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
43+- view (actual UI)
3444- renders via termwiz
3545- viewport(Lines) -> what's actually visible
3646- extend the view via Decorations (inline styling) or Components (UI)
3747 - mark / wieget / line / replace decoration
38−commands (transform state)
48+- commands (transform state)
3949- movement
4050- selection extension
4151- deletion
4252- indentation
43−keymap (maps keys to commands)
44−history (undo tree via immutable ropes)
53+- keymap (maps keys to commands)
54+- history (undo tree via immutable ropes)
4555- undoes transactions
4656- invert changes (generates a revert)
47−(collab mode)
48−gutter (line numbers, diagnostic marker, etc) -> ties into UI components
49−rangeset/span -> mappable over changes (can be a marker primitive?)
50−syntax (treesitter)
57+- (collab mode)
58+- gutter (line numbers, diagnostic marker, etc) -> ties into UI components
59+- rangeset/span -> mappable over changes (can be a marker primitive?)
60+- syntax (treesitter)
5161- indentation strategies
52−fold
53−selections (select mode/multiselect)
54−matchbrackets
55−closebrackets
56−special-chars (shows dots etc for specials)
57−panel (for UI: file pickers, search dialogs, etc)
58−tooltip (for UI)
59−search (regex? pcre)
60−lint (async linters)
61−lsp
62−highlight (?)
63−stream-syntax
64−autocomplete
65−comment (gc, etc for auto commenting)
66−snippets
67−
68−terminal mode?
69−
70−plugins can contain more commands/ui abstractions to use elsewhere
71−
72−languageData as presets for each language (syntax, indent, comment, etc)
73−
74−TODO: determine rust vs script portions
75−
76−vim stuff:
77−motions/operators/text objects
78−full visual mode
79−macros
80−jump lists
81−marks
82−yank/paste
83−conceal for markdown markers, etc
84−
62+- fold
63+- selections (select mode/multiselect)
64+- matchbrackets
65+- closebrackets
66+- special-chars (shows dots etc for specials)
67+- panel (for UI: file pickers, search dialogs, etc)
68+- tooltip (for UI)
69+- search (regex? pcre)
70+- lint (async linters)
71+- lsp
72+- highlight (?)
73+- stream-syntax
74+- autocomplete
75+- comment (gc, etc for auto commenting)
76+- snippets
77+- terminal mode?
8578
86−---
79+- plugins can contain more commands/ui abstractions to use elsewhere
80+- languageData as presets for each language (syntax, indent, comment, etc)
8781
88−codemirror uses offsets exclusively with Line being computed when necessary
89−(with start/end extents)
90−lines are temporarily cached in a lineCache
82+Vim stuff:
83+- motions/operators/text objects
84+- full visual mode
85+- macros
86+- jump lists
87+- marks
88+- yank/paste
89+- conceal for markdown markers, etc