Fork of helix with some PRs merged
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.
 
 
 
 
 
Go to file
Blaž Hrastnik 5103dc9617 move commands and keymap back to terminal.
Command needs to be able to deal with UI. We'll separate it again later
on.
4 years ago
.github/workflows Checkout submodules on clone. 4 years ago
helix-core wip 4 years ago
helix-lsp Update deps. 4 years ago
helix-syntax added tab to insert mode 4 years ago
helix-term move commands and keymap back to terminal. 4 years ago
helix-view move commands and keymap back to terminal. 4 years ago
.gitignore Incremental parsing: rough draft. 4 years ago
.gitmodules More robust syntax detection/grammar loading. 4 years ago
Cargo.lock move commands and keymap back to terminal. 4 years ago
Cargo.toml wip 4 years ago
README.md Update README. 4 years ago
TODO.md More robust syntax detection/grammar loading. 4 years ago

README.md

Helix

Crate Description
helix-core Core editing primitives, functional.
helix-syntax Tree-sitter grammars
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)

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)

Vim stuff:

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