on e98cdeb help sign in
helix/README.md
81 lines 2.3 kB history raw
1- server-client architecture via gRPC, UI separate from core
2- multi cursor based editing and slicing
3- WASM based plugins (builtin LSP & fuzzy file finder)
4- piece table-based tree structure for changes
7Structure similar to codemirror:
9text (ropes)
10- column utils, stuff like tab aware (row, col) -> char pos translation
11- word/grapheme/code point utils and iterators
12state
13- transactions
14 - changes
15 - annotations (time changed etc)
16 - state effects
17 - additional editor state as facets
18- snapshots as an async view into current state
19- selections { anchor (nonmoving), head (moving) from/to } -> SelectionSet with a primary
20 - cursor is just a single range selection
21- markers
22 track a position inside text that synchronizes with edits
23{ doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
24view (actual UI)
25- renders via termwiz
26- viewport(Lines) -> what's actually visible
27- extend the view via Decorations (inline styling) or Components (UI)
28 - mark / wieget / line / replace decoration
29commands (transform state)
30- movement
31- selection extension
32- deletion
33- indentation
34keymap (maps keys to commands)
35history (undo tree via immutable ropes)
36- undoes transactions
37- invert changes (generates a revert)
38(collab mode)
39gutter (line numbers, diagnostic marker, etc) -> ties into UI components
40rangeset/span -> mappable over changes (can be a marker primitive?)
41syntax (treesitter)
42- indentation strategies
43fold
44selections (select mode/multiselect)
45matchbrackets
46closebrackets
47special-chars (shows dots etc for specials)
48panel (for UI: file pickers, search dialogs, etc)
49tooltip (for UI)
50search (regex? pcre)
51lint (async linters)
52lsp
53highlight (?)
54stream-syntax
55autocomplete
56comment (gc, etc for auto commenting)
57snippets
59terminal mode?
61plugins can contain more commands/ui abstractions to use elsewhere
63languageData as presets for each language (syntax, indent, comment, etc)
65TODO: determine rust vs script portions
67vim stuff:
68motions/operators/text objects
69full visual mode
70macros
71jump lists
72marks
73yank/paste
74conceal for markdown markers, etc
77---
79codemirror uses offsets exclusively with Line being computed when necessary
80(with start/end extents)
81lines are temporarily cached in a lineCache