From cb8c9186e6ff563e23ca8faac5e3148fbdf68d10 Mon Sep 17 00:00:00 2001 From: Riccardo Mazzarini Date: Sat, 21 Feb 2026 00:35:55 +0100 Subject: feat(highlight): support more SGR attributes #37901 Problem: TUI does not support several standard SGR text attributes: - dim/faint (SGR 2) - blink (SGR 5) - conceal (SGR 8) - overline (SGR 53) This means that when a program running in the embedded terminal emits one of these escape codes, we drop it and don't surface it to the outer terminal. Solution: - Add support for those attributes. - Also add corresponding flags to `nvim_set_hl` opts, so users can set these attributes in highlight groups. - refactor(highlight): widen `HlAttrFlags` from `int16_t` to `int32_t` Widen the `rgb_ae_attr` and `cterm_ae_attr` fields in HlAttrs from int16_t to int32_t to make room for new highlight attribute flags, since there was only one spare bit left. - The C flag is named HL_CONCEALED to avoid colliding with the existing HL_CONCEAL in syntax.h (which is a syntax group flag, not an SGR attribute). - Also note that libvterm doesn't currently support the dim and overline attributes, so e.g. `printf '\e[2mThis should be dim\n'` and `printf '\e[53mThis should have an overline\n'` are still not rendered correctly when run from the embedded terminal. --- runtime/lua/vim/_meta/api_keysets.lua | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'runtime/lua/vim/_meta/api_keysets.lua') diff --git a/runtime/lua/vim/_meta/api_keysets.lua b/runtime/lua/vim/_meta/api_keysets.lua index 595e54686d..6d3b4aedf1 100644 --- a/runtime/lua/vim/_meta/api_keysets.lua +++ b/runtime/lua/vim/_meta/api_keysets.lua @@ -306,6 +306,10 @@ error('Cannot require a meta file') --- @field italic? boolean --- @field reverse? boolean --- @field altfont? boolean +--- @field dim? boolean +--- @field blink? boolean +--- @field conceal? boolean +--- @field overline? boolean --- @field nocombine? boolean --- @field default? boolean --- @field cterm? vim.api.keyset.highlight_cterm @@ -338,6 +342,10 @@ error('Cannot require a meta file') --- @field italic? boolean --- @field reverse? boolean --- @field altfont? boolean +--- @field dim? boolean +--- @field blink? boolean +--- @field conceal? boolean +--- @field overline? boolean --- @field nocombine? boolean --- @class vim.api.keyset.keymap -- cgit