aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md80
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)