4| ----------- | ----------- |
5| helix-core | Core editing primitives, functional. |
6| helix-syntax | Tree-sitter grammars |
7| helix-view | UI abstractions for use in backends, imperative shell. |
8| helix-term | Terminal UI |
10- server-client architecture via gRPC, UI separate from core
11- multi cursor based editing and slicing
12- WASM based plugins (builtin LSP & fuzzy file finder)
13- piece table-based tree structure for changes
16Structure similar to codemirror:
19- column utils, stuff like tab aware (row, col) -> char pos translation
20- word/grapheme/code point utils and iterators
24 - annotations (time changed etc)
26 - additional editor state as facets
27- snapshots as an async view into current state
28- selections { anchor (nonmoving), head (moving) from/to } -> SelectionSet with a primary
29 - cursor is just a single range selection
31 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 }
35- viewport(Lines) -> what's actually visible
36- extend the view via Decorations (inline styling) or Components (UI)
37 - mark / wieget / line / replace decoration
38commands (transform state)
43keymap (maps keys to commands)
44history (undo tree via immutable ropes)
46- invert changes (generates a revert)
48gutter (line numbers, diagnostic marker, etc) -> ties into UI components
49rangeset/span -> mappable over changes (can be a marker primitive?)
51- indentation strategies
53selections (select mode/multiselect)
56special-chars (shows dots etc for specials)
57panel (for UI: file pickers, search dialogs, etc)
65comment (gc, etc for auto commenting)
70plugins can contain more commands/ui abstractions to use elsewhere
72languageData as presets for each language (syntax, indent, comment, etc)
74TODO: determine rust vs script portions
77motions/operators/text objects
83conceal for markdown markers, etc
88codemirror uses offsets exclusively with Line being computed when necessary
89(with start/end extents)
90lines are temporarily cached in a lineCache
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list