Open main menu

Overview

Helix is a modal, character-based text editor.

Helix does not natively provide an editing environment for ConTeXt, but does provide excellent support for Tree-Sitter parsers and Language Server Protocol servers, which can provide a good deal of support for editing ConTeXt source files.

Tree-Sitter Support

Helix can be configured to use the ConTeXt Tree-Sitter parser.

Helix provides documentation for adding a tree-sitter grammar here: https://docs.helix-editor.com/guides/adding_languages.html


Language Server Protocol Support

Helix can support Language Server Protocol servers.

Example Configuration

This minimal example configuration enables:

  • Syntax highlighting for ConTeXt markup
  • Injections for Lua code code environments, and various typing environments

Configuring languages.toml

In the Helix configuration directory (usually ~/.config/helix), create or edit the file languages.toml to include the following:

[[language]]
name = "context"
scope = "source.context"
file-types = ["lmtx", "ctx"] 

[[grammar]]
name = "context"
[source]
git = "https://github.com/pmazaitis/tree-sitter-context"
rev = "4522ee13d58373f79d163df2baef80ea66908a8e"

Notes:

  • In testing, including "tex" in the filetypes list will disable ConTeXt highlighting (a conflict with LaTeX support?).
  • The rev field points to a specific git commit in the referenced GitHub repository. This reference will need to be updated manually (to either a long hash or a tag) to take advantage of newer versions of the tree-sitter parser.

More configuration options are detailed in the Helix languages.toml documentation.

Adding Queries

For Helix to make use of Tree-Sitter, we must also supply query files to teach Helix what to do with the parser output.

Query files are stored in a subfolder of the Helix configuration directory (usually ~/.config/helix/runtime/queries/context, for queries relating to the context langauge).

A sample query file for syntax highlighting:

; ~/.config/helix/runtime/queries/context/highlights.scm
;
; highlights.scm for tree-sitter-context

(text) @user.text
(title_setting (value (value_brace_group (value_brace_group_text) @user.text)))

(command_name) @command.name

(settings_block) @command.set
(option_block) @command.set

(line_comment) @comment

(escaped) @escaped

(inline_math) @math

A sample query file for handling injections:

; ~/.config/helix/runtime/queries/context/injections.scm
;
; injections.scm for tree-sitter-context

((code_lua_body) @injection.content
 (#set! injection.language "lua"))

((typing_html_body) @injection.content
 (#set! injection.language "html"))

((typing_css_body) @injection.content
  (#set! injection.language "css"))

((typing_lua_body) @injection.content
   (#set! injection.language "lua"))

((typing_xml_body) @injection.content
    (#set! injection.language "xml"))

((typing_parsedxml_body) @injection.content
    (#set! injection.language "xml"))