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.
This commit is contained in:
Riccardo Mazzarini
2026-02-21 00:35:55 +01:00
committed by GitHub
parent 57c6b61cf2
commit cb8c9186e6
21 changed files with 236 additions and 26 deletions

View File

@@ -9681,7 +9681,7 @@ M.funcs = {
The optional argument {opts} is a Dict and supports the following items:
peer : If |TRUE|, servers not started by |serverstart()|
peer : If |TRUE|, servers not started by |serverstart()|
will also be returned. (default: |FALSE|)
Not supported on Windows yet.
@@ -12158,6 +12158,10 @@ M.funcs = {
"strikethrough" "1" if struckthrough
"altfont" "1" if alternative font
"nocombine" "1" if nocombine
"dim" "1" if half-bright/dimmed
"blink" "1" if blinking
"conceal" "1" if concealed
"overline" "1" if overlined
Returns an empty string on error.