Skip to content
YuFei29 edited this page Jun 5, 2023 · 13 revisions

Line flags are information optionally displayed in new columns on the left of the screen.

Line numbers belong to this category of UI gutter widgets. They are defined as special type of highlighters, so to enable them in your kakrc:

add-highlighter global/ number-lines

Line flags can also provide valuable contextual data ; when using git-tools.kak and triggering the git blame command, the name and date of the last commit of each lines will be displayed in an extra column on the left. When using lint.kak, errors (in red) and warnings (in yellow) indicators will also be added to another extra column on the left.

Good news is, you can also create your own line flags. Let's have a look at the following snippet:

define-command display-flags %{
  declare-option line-specs my_flags
  set-face window MyFlags white,blue
  set-option global my_flags %val{timestamp} '1|Foo' '3|{red,yellow+b}Bar'
  add-highlighter window/ flag-lines MyFlags my_flags
}

Here's what's going on line by line:

  • define-command display-flags: we encapsulate our logic in a new command to call it manually later :display-flags.
  • declare-option line-specs my_flags: we declare a new empty option called my_flags of type line-specs. This type forces us to respect a specific format explained below.
  • set-face MyFlags white,blue: we create a new face with a white foreground and blue background. It means that the whole new column will be styled like this. Each line can then refine its style individually. A less intrusive choice could be set-face MyFlags default
  • set-option global my_flags %{timestamp} '1|Foo' '3|{red,yellow+b}Bar': we finally assign a value to the option declared above. We must provide a list of tuples wrapped in quotes'. Note that the first element is an exception. In this case we should provide a number, symbolizing the current timestamp. Each tuple holds a line number followed by a pipe | and then the text we want to display on this line. Optionally we can provide a face definition between braces {}. So in our example, the whole flags column will be blue. The flag on line 1 will display Foo in white and the flag on line 3 will display Bar in red on yellow and bold. See :doc options types for more infos on the line-specs type.
  • add-highlighter flag-lines MyFlags my_flags: we make the magic happens by adding a new highlighter of type flag-lines, using the face MyFlags and the line-specs options my_flags

Notes

Previous to this commit (May 2017), the line-specs type used to be called line-flags.

Examples

This feature is used in kakoune-palette

Clone this wiki locally