diff --git a/README.md b/README.md index 3a0ac3175..5d963d0f4 100644 --- a/README.md +++ b/README.md @@ -7,18 +7,28 @@ | helix-view | UI abstractions for use in backends, imperative shell. | | helix-term | Terminal UI | +# Installation + +``` +git clone --depth 1 --recurse-submodules -j8 https://github.com/helix-editor/helix +cd helix +cargo install --path helix-term +``` + +This will install the `hx` binary to `$HOME/.cargo/bin`. + +# Notes + - 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) +- text (ropes) - column utils, stuff like tab aware (row, col) -> char pos translation - word/grapheme/code point utils and iterators -state +- state - transactions - changes - annotations (time changed etc) @@ -29,62 +39,51 @@ state - 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) +- { 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) +- commands (transform state) - movement - selection extension - deletion - indentation -keymap (maps keys to commands) -history (undo tree via immutable ropes) +- 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) +- (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 - +- 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) -codemirror uses offsets exclusively with Line being computed when necessary -(with start/end extents) -lines are temporarily cached in a lineCache +Vim stuff: +- motions/operators/text objects +- full visual mode +- macros +- jump lists +- marks +- yank/paste +- conceal for markdown markers, etc