Unnamed repository; edit this file 'description' to name the repository.

name: Bug report about: Create a report to help us improve title: '' labels: C-bug assignees: ''


Reproduction steps

Environment

  • Platform:
  • Helix version:
~/.cache/helix/helix.log
please provide a copy of `~/.cache/helix/helix.log` here if possible, you may need to redact some of the lines
hting and other features.

View

The view layer was supposed to be a frontend-agnostic imperative library that would build on top of core to provide the common editor logic. Currently it's tied to the terminal UI.

A Document ties together the Rope, Selection(s), Syntax, document History, language server (etc.) into a comprehensive representation of an open file.

A View represents an open split in the UI. It holds the currently open document ID and other related state. Views encapsulate the gutter, status line, diagnostics, and the inner area where the code is displayed.

NOTE: Multiple views are able to display the same document, so the document contains selections for each view. To retrieve, document.selection() takes a ViewId.

Info is the autoinfo box that shows hints when awaiting another key with bindings like g and m. It is attached to the viewport as a whole.

Surface is like a buffer to which widgets draw themselves to, and the surface is then rendered on the screen on each cycle.

Rects are areas (simply an x and y coordinate with the origin at the screen top left and then a height and width) which are part of a Surface. They can be used to limit the area to which a Component can render. For example if we wrap a Markdown component in a Popup (think the documentation popup with space+k), Markdown's render method will get a Rect that is the exact size of the popup.

Widgets are called Components internally, and you can see most of them in helix-term/src/ui. Some components like Popup and Overlay can take other components as children.

Layers are how multiple components are displayed, and is simply a Vec<Component>. Layers are managed by the Compositor. On each top level render call, the compositor renders each component in the order they were pushed into the stack. This makes multiple components "layer" on top of one another. Hence we get a file picker displayed over the editor, etc.

The Editor holds the global state: all the open documents, a tree representation of all the view splits, the configuration, and a registry of language servers. To open or close files, interact with the editor.

LSP

A language server protocol client.

Term

The terminal frontend.

The main function sets up a new Application that runs the event loop.

commands.rs is probably the most interesting file. It contains all commands (actions tied to keybindings).

keymap.rs links commands to key combinations.

TUI / Term

TODO: document Component and rendering related stuff