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:
10- column utils, stuff like tab aware (row, col) -> char pos translation
11- word/grapheme/code point utils and iterators
15 - annotations (time changed etc)
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
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 }
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)
34keymap (maps keys to commands)
35history (undo tree via immutable ropes)
37- invert changes (generates a revert)
39gutter (line numbers, diagnostic marker, etc) -> ties into UI components
40rangeset/span -> mappable over changes (can be a marker primitive?)
42- indentation strategies
44selections (select mode/multiselect)
47special-chars (shows dots etc for specials)
48panel (for UI: file pickers, search dialogs, etc)
56comment (gc, etc for auto commenting)
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
68motions/operators/text objects
74conceal for markdown markers, etc
79codemirror uses offsets exclusively with Line being computed when necessary
80(with start/end extents)
81lines 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