mirror of https://github.com/helix-editor/helix
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.2 KiB
Markdown
81 lines
2.2 KiB
Markdown
5 years ago
|
- server-client architecture via gRPC, UI separate from core
|
||
|
- multi cursor based editing and slicing
|
||
|
- WASM based plugins (builtin LSP & fuzzy file finder)
|
||
|
- piece table-based tree structure for changes
|
||
|
|
||
|
|
||
|
Structure similar to codemirror:
|
||
|
|
||
|
text (ropes)
|
||
|
- column utils, stuff like tab aware (row, col) -> char pos translation
|
||
|
- word/grapheme/code point utils and iterators
|
||
|
state
|
||
|
- transactions
|
||
|
- changes
|
||
|
- annotations (time changed etc)
|
||
|
- state effects
|
||
|
- additional editor state as facets
|
||
|
- snapshots as an async view into current state
|
||
|
- selections { anchor (nonmoving), head (moving) from/to } -> SelectionSet with a primary
|
||
|
- cursor is just a single range selection
|
||
|
- markers
|
||
|
track a position inside text that synchronizes with edits
|
||
|
{ doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
|
||
|
view (actual UI)
|
||
|
- renders via termwiz
|
||
|
- viewport(Lines) -> what's actually visible
|
||
|
- extend the view via Decorations (inline styling) or Components (UI)
|
||
|
- mark / wieget / line / replace decoration
|
||
|
commands (transform state)
|
||
|
- movement
|
||
|
- selection extension
|
||
|
- deletion
|
||
|
- indentation
|
||
|
keymap (maps keys to commands)
|
||
|
history (undo tree via immutable ropes)
|
||
|
- undoes transactions
|
||
|
- invert changes (generates a revert)
|
||
|
(collab mode)
|
||
|
gutter (line numbers, diagnostic marker, etc) -> ties into UI components
|
||
|
rangeset/span -> mappable over changes (can be a marker primitive?)
|
||
|
syntax (treesitter)
|
||
|
- indentation strategies
|
||
|
fold
|
||
|
selections (select mode/multiselect)
|
||
|
matchbrackets
|
||
|
closebrackets
|
||
|
special-chars (shows dots etc for specials)
|
||
|
panel (for UI: file pickers, search dialogs, etc)
|
||
|
tooltip (for UI)
|
||
|
search (regex? pcre)
|
||
|
lint (async linters)
|
||
|
lsp
|
||
|
highlight (?)
|
||
|
stream-syntax
|
||
|
autocomplete
|
||
|
comment (gc, etc for auto commenting)
|
||
|
snippets
|
||
|
|
||
|
terminal mode?
|
||
|
|
||
|
plugins can contain more commands/ui abstractions to use elsewhere
|
||
|
|
||
|
languageData as presets for each language (syntax, indent, comment, etc)
|
||
|
|
||
|
TODO: determine rust vs script portions
|
||
|
|
||
|
vim stuff:
|
||
|
motions/operators/text objects
|
||
|
full visual mode
|
||
|
macros
|
||
|
jump lists
|
||
|
marks
|
||
|
yank/paste
|
||
|
conceal for markdown markers, etc
|
||
|
|
||
|
|
||
|
---
|
||
|
|
||
|
codemirror uses offsets exclusively with Line being computed when necessary
|
||
|
(with start/end extents)
|