fix(highlight): add StatusLineTerm/StatusLineTermNC to :color vim (#29313)

Problem: both `StatusLineTerm`/`StatusLineTermNC` are now explicitly
  used, but `:color vim` does not set them to the values used in Vim.
  This might be fine if `:color vim` is treated as "the state of default
  color scheme prior the big update", but it seems to be better treated
  as "Vim's default color scheme" (how it is documented in its header).

Solution: add `StatusLineTerm`/`StatusLineTermNC` definitions to
  'runtime/colors/vim.lua'.
  Use explicit foreground colors ('Whte'/'Black') instead of `guifg=bg`
  used in source, as the latter caused some problems in the past (if
  `Normal` is not defined, `nvim_set_hl()` can't recognize `'bg'` as the
  foreground value).
  Also realign the rest of the background conditional highlight groups.
This commit is contained in:
Evgeni Chasnovski 2024-06-14 12:28:49 +03:00 committed by GitHub
parent 0a9c81d709
commit 458473acb8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 129 additions and 82 deletions

View File

@ -209,81 +209,85 @@ hi('@lsp.type.variable', { link = 'Identifier' })
if vim.o.background == 'light' then
-- Default colors only used with a light background.
hi('ColorColumn', { bg = 'LightRed', ctermbg = 'LightRed' })
hi('CursorColumn', { bg = 'Grey90', ctermbg = 'LightGrey' })
hi('CursorLine', { bg = 'Grey90', cterm = { underline = true } })
hi('CursorLineNr', { fg = 'Brown', bold = true, ctermfg = 'Brown', cterm = { underline = true } })
hi('DiffAdd', { bg = 'LightBlue', ctermbg = 'LightBlue' })
hi('DiffChange', { bg = 'LightMagenta', ctermbg = 'LightMagenta' })
hi('DiffDelete', { fg = 'Blue', bg = 'LightCyan', bold = true, ctermfg = 'Blue', ctermbg = 'LightCyan' })
hi('Directory', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('FoldColumn', { fg = 'DarkBlue', bg = 'Grey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('Folded', { fg = 'DarkBlue', bg = 'LightGrey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('LineNr', { fg = 'Brown', ctermfg = 'Brown' })
hi('MatchParen', { bg = 'Cyan', ctermbg = 'Cyan' })
hi('MoreMsg', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Pmenu', { bg = 'LightMagenta', ctermfg = 'Black', ctermbg = 'LightMagenta' })
hi('PmenuSel', { bg = 'Grey', ctermfg = 'Black', ctermbg = 'LightGrey' })
hi('PmenuThumb', { bg = 'Black', ctermbg = 'Black' })
hi('Question', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Search', { bg = 'Yellow', ctermbg = 'Yellow' })
hi('SignColumn', { fg = 'DarkBlue', bg = 'Grey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('SpecialKey', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('SpellBad', { sp = 'Red', undercurl = true, ctermbg = 'LightRed' })
hi('SpellCap', { sp = 'Blue', undercurl = true, ctermbg = 'LightBlue' })
hi('SpellLocal', { sp = 'DarkCyan', undercurl = true, ctermbg = 'Cyan' })
hi('SpellRare', { sp = 'Magenta', undercurl = true, ctermbg = 'LightMagenta' })
hi('TabLine', { bg = 'LightGrey', underline = true, ctermfg = 'Black', ctermbg = 'LightGrey', cterm = { underline = true } })
hi('Title', { fg = 'Magenta', bold = true, ctermfg = 'DarkMagenta' })
hi('Visual', { fg = 'Black', bg = 'LightGrey', ctermfg = 'Black', ctermbg = 'Grey' })
hi('WarningMsg', { fg = 'Red', ctermfg = 'DarkRed' })
hi('Comment', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('Constant', { fg = 'Magenta', ctermfg = 'DarkRed' })
hi('Special', { fg = '#6a5acd', ctermfg = 'DarkMagenta' })
hi('Identifier', { fg = 'DarkCyan', ctermfg = 'DarkCyan' })
hi('Statement', { fg = 'Brown', bold = true, ctermfg = 'Brown' })
hi('PreProc', { fg = '#6a0dad', ctermfg = 'DarkMagenta' })
hi('Type', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Underlined', { fg = 'SlateBlue', underline = true, ctermfg = 'DarkMagenta', cterm = { underline = true } })
hi('Ignore', { ctermfg = 'White' })
hi('ColorColumn', { bg = 'LightRed', ctermbg = 'LightRed' })
hi('CursorColumn', { bg = 'Grey90', ctermbg = 'LightGrey' })
hi('CursorLine', { bg = 'Grey90', cterm = { underline = true } })
hi('CursorLineNr', { fg = 'Brown', bold = true, ctermfg = 'Brown', cterm = { underline = true } })
hi('DiffAdd', { bg = 'LightBlue', ctermbg = 'LightBlue' })
hi('DiffChange', { bg = 'LightMagenta', ctermbg = 'LightMagenta' })
hi('DiffDelete', { fg = 'Blue', bg = 'LightCyan', bold = true, ctermfg = 'Blue', ctermbg = 'LightCyan' })
hi('Directory', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('FoldColumn', { fg = 'DarkBlue', bg = 'Grey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('Folded', { fg = 'DarkBlue', bg = 'LightGrey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('LineNr', { fg = 'Brown', ctermfg = 'Brown' })
hi('MatchParen', { bg = 'Cyan', ctermbg = 'Cyan' })
hi('MoreMsg', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Pmenu', { bg = 'LightMagenta', ctermfg = 'Black', ctermbg = 'LightMagenta' })
hi('PmenuSel', { bg = 'Grey', ctermfg = 'Black', ctermbg = 'LightGrey' })
hi('PmenuThumb', { bg = 'Black', ctermbg = 'Black' })
hi('Question', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Search', { bg = 'Yellow', ctermbg = 'Yellow' })
hi('SignColumn', { fg = 'DarkBlue', bg = 'Grey', ctermfg = 'DarkBlue', ctermbg = 'Grey' })
hi('SpecialKey', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('SpellBad', { sp = 'Red', undercurl = true, ctermbg = 'LightRed' })
hi('SpellCap', { sp = 'Blue', undercurl = true, ctermbg = 'LightBlue' })
hi('SpellLocal', { sp = 'DarkCyan', undercurl = true, ctermbg = 'Cyan' })
hi('SpellRare', { sp = 'Magenta', undercurl = true, ctermbg = 'LightMagenta' })
hi('StatusLineTerm', { fg = 'White', bg = 'DarkGreen', bold = true, ctermfg = 'White', ctermbg = 'DarkGreen', cterm = { bold = true } })
hi('StatusLineTermNC', { fg = 'White', bg = 'DarkGreen', ctermfg = 'White', ctermbg = 'DarkGreen' })
hi('TabLine', { bg = 'LightGrey', underline = true, ctermfg = 'Black', ctermbg = 'LightGrey', cterm = { underline = true } })
hi('Title', { fg = 'Magenta', bold = true, ctermfg = 'DarkMagenta' })
hi('Visual', { fg = 'Black', bg = 'LightGrey', ctermfg = 'Black', ctermbg = 'Grey' })
hi('WarningMsg', { fg = 'Red', ctermfg = 'DarkRed' })
hi('Comment', { fg = 'Blue', ctermfg = 'DarkBlue' })
hi('Constant', { fg = 'Magenta', ctermfg = 'DarkRed' })
hi('Special', { fg = '#6a5acd', ctermfg = 'DarkMagenta' })
hi('Identifier', { fg = 'DarkCyan', ctermfg = 'DarkCyan' })
hi('Statement', { fg = 'Brown', bold = true, ctermfg = 'Brown' })
hi('PreProc', { fg = '#6a0dad', ctermfg = 'DarkMagenta' })
hi('Type', { fg = 'SeaGreen', bold = true, ctermfg = 'DarkGreen' })
hi('Underlined', { fg = 'SlateBlue', underline = true, ctermfg = 'DarkMagenta', cterm = { underline = true } })
hi('Ignore', { ctermfg = 'White' })
else
-- Default colors only used with a dark background.
hi('ColorColumn', { bg = 'DarkRed', ctermbg = 'DarkRed' })
hi('CursorColumn', { bg = 'Grey40', ctermbg = 'DarkGrey' })
hi('CursorLine', { bg = 'Grey40', cterm = { underline = true } })
hi('CursorLineNr', { fg = 'Yellow', bold = true, ctermfg = 'Yellow', cterm = { underline = true } })
hi('DiffAdd', { bg = 'DarkBlue', ctermbg = 'DarkBlue' })
hi('DiffChange', { bg = 'DarkMagenta', ctermbg = 'DarkMagenta' })
hi('DiffDelete', { fg = 'Blue', bg = 'DarkCyan', bold = true, ctermfg = 'Blue', ctermbg = 'DarkCyan' })
hi('Directory', { fg = 'Cyan', ctermfg = 'LightCyan' })
hi('FoldColumn', { fg = 'Cyan', bg = 'Grey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('Folded', { fg = 'Cyan', bg = 'DarkGrey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('LineNr', { fg = 'Yellow', ctermfg = 'Yellow' })
hi('MatchParen', { bg = 'DarkCyan', ctermbg = 'DarkCyan' })
hi('MoreMsg', { fg = 'SeaGreen', bold = true, ctermfg = 'LightGreen' })
hi('Pmenu', { bg = 'Magenta', ctermfg = 'Black', ctermbg = 'Magenta' })
hi('PmenuSel', { bg = 'DarkGrey', ctermfg = 'DarkGrey', ctermbg = 'Black' })
hi('PmenuThumb', { bg = 'White', ctermbg = 'White' })
hi('Question', { fg = 'Green', bold = true, ctermfg = 'LightGreen' })
hi('Search', { fg = 'Black', bg = 'Yellow', ctermfg = 'Black', ctermbg = 'Yellow' })
hi('SignColumn', { fg = 'Cyan', bg = 'Grey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('SpecialKey', { fg = 'Cyan', ctermfg = 'LightBlue' })
hi('SpellBad', { sp = 'Red', undercurl = true, ctermbg = 'Red' })
hi('SpellCap', { sp = 'Blue', undercurl = true, ctermbg = 'Blue' })
hi('SpellLocal', { sp = 'Cyan', undercurl = true, ctermbg = 'Cyan' })
hi('SpellRare', { sp = 'Magenta', undercurl = true, ctermbg = 'Magenta' })
hi('TabLine', { bg = 'DarkGrey', underline = true, ctermfg = 'White', ctermbg = 'DarkGrey', cterm = { underline = true } })
hi('Title', { fg = 'Magenta', bold = true, ctermfg = 'LightMagenta' })
hi('Visual', { fg = 'LightGrey', bg = '#575757', ctermfg = 'Black', ctermbg = 'Grey' })
hi('WarningMsg', { fg = 'Red', ctermfg = 'LightRed' })
hi('Comment', { fg = '#80a0ff', ctermfg = 'Cyan' })
hi('Constant', { fg = '#ffa0a0', ctermfg = 'Magenta' })
hi('Special', { fg = 'Orange', ctermfg = 'LightRed' })
hi('Identifier', { fg = '#40ffff', ctermfg = 'Cyan', cterm = { bold = true } })
hi('Statement', { fg = '#ffff60', bold = true, ctermfg = 'Yellow' })
hi('PreProc', { fg = '#ff80ff', ctermfg = 'LightBlue' })
hi('Type', { fg = '#60ff60', bold = true, ctermfg = 'LightGreen' })
hi('Underlined', { fg = '#80a0ff', underline = true, ctermfg = 'LightBlue', cterm = { underline = true } })
hi('Ignore', { ctermfg = 'Black' })
hi('ColorColumn', { bg = 'DarkRed', ctermbg = 'DarkRed' })
hi('CursorColumn', { bg = 'Grey40', ctermbg = 'DarkGrey' })
hi('CursorLine', { bg = 'Grey40', cterm = { underline = true } })
hi('CursorLineNr', { fg = 'Yellow', bold = true, ctermfg = 'Yellow', cterm = { underline = true } })
hi('DiffAdd', { bg = 'DarkBlue', ctermbg = 'DarkBlue' })
hi('DiffChange', { bg = 'DarkMagenta', ctermbg = 'DarkMagenta' })
hi('DiffDelete', { fg = 'Blue', bg = 'DarkCyan', bold = true, ctermfg = 'Blue', ctermbg = 'DarkCyan' })
hi('Directory', { fg = 'Cyan', ctermfg = 'LightCyan' })
hi('FoldColumn', { fg = 'Cyan', bg = 'Grey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('Folded', { fg = 'Cyan', bg = 'DarkGrey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('LineNr', { fg = 'Yellow', ctermfg = 'Yellow' })
hi('MatchParen', { bg = 'DarkCyan', ctermbg = 'DarkCyan' })
hi('MoreMsg', { fg = 'SeaGreen', bold = true, ctermfg = 'LightGreen' })
hi('Pmenu', { bg = 'Magenta', ctermfg = 'Black', ctermbg = 'Magenta' })
hi('PmenuSel', { bg = 'DarkGrey', ctermfg = 'DarkGrey', ctermbg = 'Black' })
hi('PmenuThumb', { bg = 'White', ctermbg = 'White' })
hi('Question', { fg = 'Green', bold = true, ctermfg = 'LightGreen' })
hi('Search', { fg = 'Black', bg = 'Yellow', ctermfg = 'Black', ctermbg = 'Yellow' })
hi('SignColumn', { fg = 'Cyan', bg = 'Grey', ctermfg = 'Cyan', ctermbg = 'DarkGrey' })
hi('SpecialKey', { fg = 'Cyan', ctermfg = 'LightBlue' })
hi('SpellBad', { sp = 'Red', undercurl = true, ctermbg = 'Red' })
hi('SpellCap', { sp = 'Blue', undercurl = true, ctermbg = 'Blue' })
hi('SpellLocal', { sp = 'Cyan', undercurl = true, ctermbg = 'Cyan' })
hi('SpellRare', { sp = 'Magenta', undercurl = true, ctermbg = 'Magenta' })
hi('StatusLineTerm', { fg = 'Black', bg = 'LightGreen', bold = true, ctermfg = 'Black', ctermbg = 'LightGreen', cterm = { bold = true } })
hi('StatusLineTermNC', { fg = 'Black', bg = 'LightGreen', ctermfg = 'Black', ctermbg = 'LightGreen' })
hi('TabLine', { bg = 'DarkGrey', underline = true, ctermfg = 'White', ctermbg = 'DarkGrey', cterm = { underline = true } })
hi('Title', { fg = 'Magenta', bold = true, ctermfg = 'LightMagenta' })
hi('Visual', { fg = 'LightGrey', bg = '#575757', ctermfg = 'Black', ctermbg = 'Grey' })
hi('WarningMsg', { fg = 'Red', ctermfg = 'LightRed' })
hi('Comment', { fg = '#80a0ff', ctermfg = 'Cyan' })
hi('Constant', { fg = '#ffa0a0', ctermfg = 'Magenta' })
hi('Special', { fg = 'Orange', ctermfg = 'LightRed' })
hi('Identifier', { fg = '#40ffff', ctermfg = 'Cyan', cterm = { bold = true } })
hi('Statement', { fg = '#ffff60', bold = true, ctermfg = 'Yellow' })
hi('PreProc', { fg = '#ff80ff', ctermfg = 'LightBlue' })
hi('Type', { fg = '#60ff60', bold = true, ctermfg = 'LightGreen' })
hi('Underlined', { fg = '#80a0ff', underline = true, ctermfg = 'LightBlue', cterm = { underline = true } })
hi('Ignore', { ctermfg = 'Black' })
end
--stylua: ignore end

View File

@ -1056,6 +1056,11 @@ describe('TUI', function()
if is_ci('github') then
pending('tty-test complains about not owning the terminal -- actions/runner#241')
end
screen:set_default_attr_ids({
[1] = { reverse = true }, -- focused cursor
[3] = { bold = true },
[19] = { bold = true, background = 121, foreground = 0 }, -- StatusLineTerm
})
child_exec_lua('vim.o.statusline="^^^^^^^"')
child_exec_lua('vim.cmd.terminal(...)', testprg('tty-test'))
feed_data('i')
@ -1063,7 +1068,7 @@ describe('TUI', function()
tty ready |
{1: } |
|*2
{5:^^^^^^^ }|
{19:^^^^^^^ }|
{3:-- TERMINAL --} |*2
]])
feed_data('\027[200~')
@ -1073,7 +1078,7 @@ describe('TUI', function()
tty ready |
hallo{1: } |
|*2
{5:^^^^^^^ }|
{19:^^^^^^^ }|
{3:-- TERMINAL --} |*2
]])
end)
@ -1548,10 +1553,32 @@ describe('TUI', function()
screen:set_rgb_cterm(true)
screen:set_default_attr_ids({
[1] = { { reverse = true }, { reverse = true } },
[2] = { { bold = true, reverse = true }, { bold = true, reverse = true } },
[2] = {
{ bold = true, background = Screen.colors.LightGreen, foreground = Screen.colors.Black },
{ bold = true },
},
[3] = { { bold = true }, { bold = true } },
[4] = { { fg_indexed = true, foreground = tonumber('0xe0e000') }, { foreground = 3 } },
[5] = { { foreground = tonumber('0xff8000') }, {} },
[6] = {
{
fg_indexed = true,
bg_indexed = true,
bold = true,
background = tonumber('0x66ff99'),
foreground = Screen.colors.Black,
},
{ bold = true, background = 121, foreground = 0 },
},
[7] = {
{
fg_indexed = true,
bg_indexed = true,
background = tonumber('0x66ff99'),
foreground = Screen.colors.Black,
},
{ background = 121, foreground = 0 },
},
})
child_exec_lua('vim.o.statusline="^^^^^^^"')
@ -1586,7 +1613,7 @@ describe('TUI', function()
{1:t}ty ready |
{4:text}colortext |
|*2
{2:^^^^^^^ }|
{6:^^^^^^^}{7: }|
:set notermguicolors |
{3:-- TERMINAL --} |
]],
@ -1973,6 +2000,7 @@ describe('TUI', function()
[3] = { bold = true },
[4] = { foreground = tonumber('0x4040ff'), fg_indexed = true },
[5] = { bold = true, reverse = true },
[6] = { foreground = Screen.colors.White, background = Screen.colors.DarkGreen },
})
screen:attach()
fn.termopen({
@ -1998,7 +2026,7 @@ describe('TUI', function()
{2:~ }{4:~ }|*5
{2:~ }{5:[No Name] 0,0-1 All}|
{2:~ } |
{5:new }{1:{MATCH:<.*[/\]nvim }}|
{5:new }{6:{MATCH:<.*[/\]nvim }}|
|
]])
end)

View File

@ -345,12 +345,19 @@ describe('search highlighting', function()
bar baz foo
bar foo baz]])
feed('/foo')
screen:set_default_attr_ids({
[1] = { bold = true, foreground = Screen.colors.Blue },
[2] = { background = Screen.colors.Yellow }, -- Search
[3] = { reverse = true },
[4] = { bold = true, reverse = true },
[5] = { foreground = Screen.colors.White, background = Screen.colors.DarkGreen },
})
screen:expect([[
{3:foo} bar baz {MATCH:%d+}: {2:foo}{MATCH:%s+}|
bar baz {2:foo} {MATCH:%d+}: {2:foo}{MATCH:%s+}|
bar {2:foo} baz {MATCH:%d+}: {2:foo}{MATCH:%s+}|
{1:~ }{MATCH:.*}|*2
{5:[No Name] [+] }{3:term }|
{4:[No Name] [+] }{5:term }|
/foo^ |
]])
end)

View File

@ -199,9 +199,13 @@ describe("'wildmenu'", function()
feed((':terminal "%s" REP 5000 !terminal_output!<cr>'):format(testprg('shell-test')))
feed('G') -- Follow :terminal output.
feed([[:sign <Tab>]]) -- Invoke wildmenu.
screen:set_default_attr_ids {
[31] = { foreground = Screen.colors.Black, background = Screen.colors.Yellow },
[32] = { bold = true, foreground = Screen.colors.White, background = Screen.colors.DarkGreen },
}
-- NB: in earlier versions terminal output was redrawn during cmdline mode.
-- For now just assert that the screen remains unchanged.
screen:expect { any = '{31:define}{3: jump list > }|\n:sign define^ |' }
screen:expect { any = '{31:define}{32: jump list > }|\n:sign define^ |' }
screen:expect_unchanged()
-- cmdline CTRL-D display should also be preserved.
@ -259,9 +263,13 @@ describe("'wildmenu'", function()
feed([[<C-\><C-N>]])
feed([[:<Tab>]]) -- Invoke wildmenu.
screen:set_default_attr_ids {
[31] = { foreground = Screen.colors.Black, background = Screen.colors.Yellow },
[32] = { bold = true, foreground = Screen.colors.White, background = Screen.colors.DarkGreen },
}
-- Check only the last 2 lines, because the shell output is
-- system-dependent.
screen:expect { any = '{31:!}{3: # & < = > @ > }|\n:!^' }
screen:expect { any = '{31:!}{32: # & < = > @ > }|\n:!^' }
-- Because this test verifies a _lack_ of activity, we must wait the full timeout.
-- So make it reasonable.
screen:expect_unchanged(false, 1000)