on d9d59cd help sign in
helix/README.md
90 lines 2.8 kB history raw
1# Helix
3| Crate | Description |
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:
18text (ropes)
19- column utils, stuff like tab aware (row, col) -> char pos translation
20- word/grapheme/code point utils and iterators
21state
22- transactions
23 - changes
24 - annotations (time changed etc)
25 - state effects
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
30- markers
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 }
33view (actual UI)
34- renders via termwiz
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)
39- movement
40- selection extension
41- deletion
42- indentation
43keymap (maps keys to commands)
44history (undo tree via immutable ropes)
45- undoes transactions
46- invert changes (generates a revert)
47(collab mode)
48gutter (line numbers, diagnostic marker, etc) -> ties into UI components
49rangeset/span -> mappable over changes (can be a marker primitive?)
50syntax (treesitter)
51- indentation strategies
52fold
53selections (select mode/multiselect)
54matchbrackets
55closebrackets
56special-chars (shows dots etc for specials)
57panel (for UI: file pickers, search dialogs, etc)
58tooltip (for UI)
59search (regex? pcre)
60lint (async linters)
61lsp
62highlight (?)
63stream-syntax
64autocomplete
65comment (gc, etc for auto commenting)
66snippets
68terminal mode?
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
76vim stuff:
77motions/operators/text objects
78full visual mode
79macros
80jump lists
81marks
82yank/paste
83conceal for markdown markers, etc
86---
88codemirror uses offsets exclusively with Line being computed when necessary
89(with start/end extents)
90lines are temporarily cached in a lineCache