neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit ff75f345ab5fa57c6560db021e8eb099aff90472
parent 92a83f671b227ace7ded5006619bb943c2d9ecc0
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri, 22 Nov 2024 06:52:32 +0800

fix(highlight): 'winhl' shouldn't take priority over API (#31288)


Diffstat:
Msrc/nvim/api/window.c | 1+
Msrc/nvim/buffer_defs.h | 2+-
Msrc/nvim/option.c | 8+++++++-
Mtest/functional/api/highlight_spec.lua | 14++++++++++++++
4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c @@ -476,6 +476,7 @@ void nvim_win_set_hl_ns(Window window, Integer ns_id, Error *err) } win->w_ns_hl = (NS)ns_id; + win->w_ns_hl_winhl = -1; win->w_hl_needs_update = true; redraw_later(win, UPD_NOT_VALID); } diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h @@ -1035,7 +1035,7 @@ struct window_S { synblock_T *w_s; ///< for :ownsyntax int w_ns_hl; - int w_ns_hl_winhl; + int w_ns_hl_winhl; ///< when set to -1, 'winhighlight' shouldn't be used int w_ns_hl_active; int *w_ns_hl_attr; diff --git a/src/nvim/option.c b/src/nvim/option.c @@ -1736,8 +1736,14 @@ bool parse_winhl_opt(const char *winhl, win_T *wp) p = wp->w_p_winhl; } + if (wp != NULL && wp->w_ns_hl_winhl < 0) { + // 'winhighlight' shouldn't be used for this window. + // Only check that the value is valid. + wp = NULL; + } + if (!*p) { - if (wp != NULL && wp->w_ns_hl_winhl && wp->w_ns_hl == wp->w_ns_hl_winhl) { + if (wp != NULL && wp->w_ns_hl_winhl > 0 && wp->w_ns_hl == wp->w_ns_hl_winhl) { wp->w_ns_hl = 0; wp->w_hl_needs_update = true; } diff --git a/test/functional/api/highlight_spec.lua b/test/functional/api/highlight_spec.lua @@ -710,4 +710,18 @@ describe('API: set/get highlight namespace', function() api.nvim_win_set_hl_ns(0, ns) eq(ns, api.nvim_get_hl_ns({ winid = 0 })) end) + + it('setting namespace takes priority over &winhighlight', function() + command('set winhighlight=Visual:Search') + n.insert('foobar') + local ns = api.nvim_create_namespace('') + api.nvim_win_set_hl_ns(0, ns) + eq(ns, api.nvim_get_hl_ns({ winid = 0 })) + command('enew') -- switching buffer keeps namespace #30904 + eq(ns, api.nvim_get_hl_ns({ winid = 0 })) + command('set winhighlight=') + eq(ns, api.nvim_get_hl_ns({ winid = 0 })) + command('set winhighlight=Visual:Search') + eq(ns, api.nvim_get_hl_ns({ winid = 0 })) + end) end)