ui.txt          Nvim


NVIM REFERENCE MANUAL

Nvim UI protocol ui

Type gO to see the table of contents.

UI Events ui-events

GUIs can be implemented as external processes communicating with Nvim over the RPC API. The UI model consists of a terminal-like grid with a single, monospace font size. Some elements (UI "widgets") can be drawn separately from the grid ("externalized").
                                                                  ui-options
After connecting to Nvim (usually a spawned, embedded instance) use the
nvim_ui_attach API method to tell Nvim that your program wants to draw the
Nvim screen grid with a size of width × height cells. options   must be
a dictionary with these (optional) keys:
        `rgb`                   Decides the color format.
                                Set true (default) for 24-bit RGB colors.
                                Set false for terminal colors (max of 256).
                                                              ui-ext-options
        `ext_popupmenu`         Externalize the popupmenu. ui-popupmenu
        `ext_tabline`           Externalize the tabline. ui-tabline
        `ext_cmdline`           Externalize the cmdline. ui-cmdline
        `ext_wildmenu`          Externalize the wildmenu. ui-ext-wildmenu

Nvim will then send msgpack-rpc notifications, with the method name "redraw"
and a single argument, an array of screen update events.
Update events are tuples whose first element is the event name and remaining
elements the event parameters.

Events must be handled in order. The user should only see the updated screen
state after all events in the same "redraw" batch are processed (not any
intermediate state after processing only part of the array).

Nvim sends ui-global and ui-grid events unconditionally; these suffice to
implement a terminal-like interface.

Nvim optionally sends screen elements "semantically" as structured events
instead of raw grid-lines. Then the UI must decide how to present those
elements itself; Nvim will not draw those elements on the grid. This is
controlled by the ui-ext-options.

Future versions of Nvim may add new update kinds and may append new parameters
to existing update kinds. Clients must be prepared to ignore such extensions
to be forward-compatible. api-contract

Global Events ui-global

["set_title", title] ["set_icon", icon] Set the window title, and icon (minimized) window title, respectively. In windowing systems not distinguishing between the two, "set_icon" can be ignored. ["mode_info_set", cursor_style_enabled, mode_info] cursor_style_enabled is a boolean indicating if the UI should set the cursor style. mode_info is a list of mode property maps. The current mode is given by the mode_idx field of the mode_change event. Each mode property map may contain these keys: KEY DESCRIPTION cursor_shape : "block", "horizontal", "vertical" cell_percentage : Cell % occupied by the cursor. blinkwait , blinkon , blinkoff : See cursor-blinking. hl_id : Cursor highlight group. hl_lm : Cursor highlight group if 'langmap' is active. short_name : Mode code name, see 'guicursor'. name : Mode descriptive name. mouse_shape : (To be implemented.) Some keys are missing in some modes. ["option_set", name, value] The value of ui related option name changed. The sent options are listed below: 'arabicshape' 'ambiwith' 'emoji' 'guifont' 'guifontset' 'guifontwide' 'linespace' 'showtabline' 'termguicolors' Options are not added to the list if their effects are already taken care of. For instance, instead of forwarding the raw 'mouse' option value, mouse_on and mouse_off directly indicate if mouse support is active right now. Some options like 'ambiwith' have already taken effect on the grid, where appropriate empty cells are added, however an ui might still use these options when rendering raw text sent from Nvim, like the text of the cmdline when ui-ext-cmdline is set. ["mode_change", mode, mode_idx] The mode changed. The first parameter mode is a string representing the current mode. mode_idx is an index into the array received in the mode_info_set event. UIs should change the cursor style according to the properties specified in the corresponding item. The set of modes reported will change in new versions of Nvim, for instance more submodes and temporary states might be represented as separate modes. ["mouse_on"] ["mouse_off"] Tells the client whether mouse support, as determined by 'mouse' option, is considered to be active in the current mode. This is mostly useful for a terminal frontend, or other situations where nvim mouse would conflict with other usages of the mouse. It is safe for a client to ignore this and always send mouse events. ["busy_on"] ["busy_off"] Nvim started or stopped being busy, and possibly not responsive to user input. This could be indicated to the user by hiding the cursor. ["suspend"] :suspend command or Ctrl-Z mapping is used. A terminal client (or other client where it makes sense) could suspend itself. Other clients can safely ignore it. ["update_menu"] The menu mappings changed. ["bell"] ["visual_bell"] Notify the user with an audible or visual bell, respectively.

Grid Events ui-grid

["resize", width, height] The grid is resized to width and height cells. ["clear"] Clear the grid. ["eol_clear"] Clear from the cursor position to the end of the current line. ["cursor_goto", row, col] Move the cursor to position (row, col). Currently, the same cursor is used to define the position for text insertion and the visible cursor. However, only the last cursor position, after processing the entire array in the "redraw" event, is intended to be a visible cursor position. ["update_fg", color] ["update_bg", color] ["update_sp", color] Set the default foreground, background and special colors respectively.
                                                      ui-event-highlight_set
["highlight_set", attrs]
        Set the attributes that the next text put on the grid will have.
        attrs   is a dict with the keys below. Any absent key is reset
        to its default value. Color defaults are set by the update_fg   etc
        updates. All boolean keys default to false.

        foreground  :   foreground color.
        background  :   backround color.
        special  :      color to use for underline and undercurl, when present.
        reverse  :      reverse video. Foreground and background colors are
                        switched.
        italic  :       italic text.
        bold  :         bold text.
        underline  :    underlined text. The line has special   color.
        undercurl  :    undercurled text. The curl has special   color.

["put", text]
        The (utf-8 encoded) string text   is put at the cursor position
        (and the cursor is advanced), with the highlights as set by the
        last highlight_set   update.

["set_scroll_region", top, bot, left, right]
        Define the scroll region used by scroll   below.

["scroll", count]
        Scroll the text in the scroll region. The diagrams below illustrate
        what will happen, depending on the scroll direction. "=" is used to
        represent the SR(scroll region) boundaries and "-" the moved rectangles.
        Note that dst and src share a common region.

        If count is bigger than 0, move a rectangle in the SR up, this can
        happen while scrolling down.
+-------------------------+
| (clipped above SR)      |            ^
|=========================| dst_top    |
| dst (still in SR)       |            |
+-------------------------+ src_top    |
| src (moved up) and dst  |            |
|-------------------------| dst_bot    |
| src (cleared)           |            |
+=========================+ src_bot

        If count is less than zero, move a rectangle in the SR down, this can
        happen while scrolling up.
+=========================+ src_top
| src (cleared)           |            |
|------------------------ | dst_top    |
| src (moved down) and dst|            |
+-------------------------+ src_bot    |
| dst (still in SR)       |            |
|=========================| dst_bot    |
| (clipped below SR)      |            v
+-------------------------+

Popupmenu Events ui-popupmenu

Only sent if ext_popupmenu option is set in ui-options ["popupmenu_show", items, selected, row, col] Show popupmenu-completion. items is an array of completion items to show; each item is an array of the form [word, kind, menu, info] as defined at complete-items, except that word is replaced by abbr if present. selected is the initially-selected item, a zero-based index into the array of items (-1 if no item is selected). row and col give the anchor position, where the first character of the completed word will be. ["popupmenu_select", selected] Select an item in the current popupmenu. selected is a zero-based index into the array of items from the last popupmenu_show event, or -1 if no item is selected. ["popupmenu_hide"] Hide the popupmenu.

Tabline Events ui-tabline

Only sent if ext_tabline option is set in ui-options ["tabline_update", curtab, tabs] Tabline was updated. UIs should present this data in a custom tabline widget. curtab: Current Tabpage tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]

Cmdline Events ui-cmdline

Only sent if ext_cmdline option is set in ui-options ["cmdline_show", content, pos, firstc, prompt, indent, level] content: List of [attrs, string] [[{}, "t"], [attrs, "est"], ...] Triggered when the cmdline is displayed or changed. The content is the full content that should be displayed in the cmdline, and the pos is the position of the cursor that in the cmdline. The content is divided into chunks with different highlight attributes represented as a dict (see ui-event-highlight_set). firstc and prompt are text, that if non-empty should be displayed in front of the command line. firstc always indicates built-in command lines such as : (ex command) and / ? (search), while prompt is an input() prompt. indent tells how many spaces the content should be indented. The Nvim command line can be invoked recursively, for instance by typing <c-r>= at the command line prompt. The level field is used to distinguish different command lines active at the same time. The first invoked command line has level 1, the next recursively-invoked prompt has level 2. A command line invoked from the cmd-line-window has a higher level than than the edited command line. ["cmdline_pos", pos, level] Change the cursor position in the cmdline. ["cmdline_special_char", c, shift, level] Display a special char in the cmdline at the cursor position. This is typically used to indicate a pending state, e.g. after c_CTRL-V. If shift is true the text after the cursor should be shifted, otherwise it should overwrite the char at the cursor. Should be hidden at next cmdline_show. ["cmdline_hide"] Hide the cmdline. ["cmdline_block_show", lines] Show a block of context to the current command line. For example if the user defines a :function interactively:
function Foo()
  echo "foo"

        lines   is a list of lines of highlighted chunks, in the same form as
        the "cmdline_show" contents   parameter.

["cmdline_block_append", line]
        Append a line at the end of the currently shown block.

["cmdline_block_hide"]
        Hide the block.

Wildmenu Events ui-wildmenu

Only sent if ext_wildmenu option is set in ui-options ["wildmenu_show", items] Activate the wildmenu (command-line completion). items is an array with the completion items. ["wildmenu_select", selected] Select an item in the current wildmenu. selected is a zero-based index into the array of items from the last wildmenu_show event, or -1 if no item is selected. ["wildmenu_hide"] Hide the wildmenu.

 vim:tw=78:ts=8:noet:ft=help:norl: