mirror of
https://github.com/neovim/neovim.git
synced 2025-12-06 22:52:42 +00:00
fix(ui2): unset Search highlighting (#36633)
Problem: Trying to match the search highlight groups to the Normal highlight for the window can fail when the message highlighting contains a fg/bg that the Normal highlight doesn't (like an error message in cmd will have ErrorMsg highlight instead of MsgArea - which is Normal in cmd.) Solution: Link the search highlight groups to an empty group in 'winhighlight' thus disabling them instead of overriding them with Normal/MsgArea/etc.
This commit is contained in:
@@ -81,10 +81,13 @@ function M.check_targets()
|
||||
api.nvim_set_option_value('bufhidden', 'hide', { scope = 'local' })
|
||||
api.nvim_set_option_value('buftype', 'nofile', { scope = 'local' })
|
||||
-- Use MsgArea except in the msg window. Hide Search highlighting except in the pager.
|
||||
local hide = type == 'msg' and 'NormalFloat' or 'MsgArea'
|
||||
hide = ('Search:%s,CurSearch:%s,IncSearch:%s'):format(hide, hide, hide)
|
||||
local hl = type == 'msg' and '' or 'Normal:MsgArea' .. (type ~= 'pager' and ',' or '')
|
||||
hl = hl .. (type ~= 'pager' and hide or '')
|
||||
local search_hide = 'Search:,CurSearch:,IncSearch:'
|
||||
local hl = 'Normal:MsgArea,' .. search_hide
|
||||
if type == 'pager' then
|
||||
hl = 'Normal:MsgArea'
|
||||
elseif type == 'msg' then
|
||||
hl = search_hide
|
||||
end
|
||||
api.nvim_set_option_value('winhighlight', hl, { scope = 'local' })
|
||||
end)
|
||||
api.nvim_buf_set_name(M.bufs[type], ('[%s]'):format(type:sub(1, 1):upper() .. type:sub(2)))
|
||||
|
||||
@@ -440,21 +440,31 @@ describe('messages2', function()
|
||||
end)
|
||||
|
||||
it('Search highlights only apply to pager', function()
|
||||
screen:add_extra_attr_ids({
|
||||
[100] = { background = Screen.colors.Blue1, foreground = Screen.colors.Red },
|
||||
[101] = { background = Screen.colors.Red1, foreground = Screen.colors.Blue1 },
|
||||
})
|
||||
command('hi MsgArea guifg=Red guibg=Blue')
|
||||
command('hi Search guifg=Blue guibg=Red')
|
||||
command('set hlsearch shortmess+=s')
|
||||
feed('/foo<CR>')
|
||||
screen:expect([[
|
||||
^ |
|
||||
{1:~ }|*12
|
||||
{9:E486: Pattern not found: foo}{100: }|
|
||||
]])
|
||||
command('set cmdheight=0 | echo "foo"')
|
||||
feed('/foo')
|
||||
screen:expect([[
|
||||
^ |
|
||||
{1:~ }|*12
|
||||
{1:~ }{4:foo}|
|
||||
]])
|
||||
feed('g<lt>')
|
||||
screen:expect([[
|
||||
|
|
||||
{1:~ }|*11
|
||||
{1:~ }{4:foo}|
|
||||
/foo^ |
|
||||
]])
|
||||
feed('<Esc>g<lt>/foo')
|
||||
screen:expect([[
|
||||
|
|
||||
{1:~ }|*10
|
||||
{3: }|
|
||||
{10:foo} |
|
||||
/foo^ |
|
||||
{101:fo^o}{100: }|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user