Unnamed repository; edit this file 'description' to name the repository.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

Notes

  • server-client architecture via gRPC, UI separate from core
  • multi cursor based editing and slicing
  • WASM based plugins (builtin LSP & fuzzy file finder)

Structure similar to codemirror:

  • text (ropes)
  • transactions
  • changes
  • invert changes (generates a revert)
  • 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)
  • 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 via reverts
  • (collab mode)
  • gutter (line numbers, diagnostic marker, etc) -> ties into UI components
  • rangeset/span -> mappable over changes (can be a marker primitive?)
  • syntax (treesitter)
  • 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)
  • 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)

Vim stuff: - motions/operators/text objects - full visual mode - macros - jump lists - marks - yank/paste - conceal for markdown markers, etc