diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 00000000..70eca234 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +- 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) |