fix(api): make nvim_set_hl(ns=0, ...) redraw screen properly

fixes #18160
This commit is contained in:
bfredl
2022-08-17 17:38:35 +02:00
parent 02e9b5a8ee
commit e29156356b
3 changed files with 39 additions and 3 deletions

View File

@@ -303,8 +303,6 @@ int hl_get_ui_attr(int ns_id, int idx, int final_id, bool optional)
if (pum_drawn()) { if (pum_drawn()) {
must_redraw_pum = true; must_redraw_pum = true;
} }
} else if (idx == HLF_MSG && ns_id == -1) {
msg_grid.blending = attrs.hl_blend > -1;
} }
if (optional && !available) { if (optional && !available) {

View File

@@ -698,7 +698,7 @@ void set_hl_group(int id, HlAttrs attrs, Dict(highlight) *dict, int link_id)
g->sg_deflink_sctx = current_sctx; g->sg_deflink_sctx = current_sctx;
g->sg_deflink_sctx.sc_lnum += SOURCING_LNUM; g->sg_deflink_sctx.sc_lnum += SOURCING_LNUM;
} }
return; goto update;
} }
g->sg_cleared = false; g->sg_cleared = false;
@@ -753,6 +753,12 @@ void set_hl_group(int id, HlAttrs attrs, Dict(highlight) *dict, int link_id)
ui_mode_info_set(); ui_mode_info_set();
} }
} }
update:
if (!updating_screen) {
redraw_all_later(NOT_VALID);
}
need_highlight_changed = true;
} }
/// Handle ":highlight" command /// Handle ":highlight" command
@@ -1942,6 +1948,8 @@ void highlight_changed(void)
if (highlight_attr[hlf] != highlight_attr_last[hlf]) { if (highlight_attr[hlf] != highlight_attr_last[hlf]) {
if (hlf == HLF_MSG) { if (hlf == HLF_MSG) {
clear_cmdline = true; clear_cmdline = true;
HlAttrs attrs = syn_attr2entry(highlight_attr[hlf]);
msg_grid.blending = attrs.hl_blend > -1;
} }
ui_call_hl_group_set(cstr_as_string((char *)hlf_names[hlf]), ui_call_hl_group_set(cstr_as_string((char *)hlf_names[hlf]),
highlight_attr[hlf]); highlight_attr[hlf]);

View File

@@ -2335,6 +2335,7 @@ describe('highlight namespaces', function()
[5] = {background = Screen.colors.Magenta4, foreground = Screen.colors.Crimson}; [5] = {background = Screen.colors.Magenta4, foreground = Screen.colors.Crimson};
[6] = {bold = true, reverse = true}; [6] = {bold = true, reverse = true};
[7] = {reverse = true}; [7] = {reverse = true};
[8] = {foreground = Screen.colors.Gray20};
} }
ns1 = meths.create_namespace 'grungy' ns1 = meths.create_namespace 'grungy'
@@ -2425,4 +2426,33 @@ describe('highlight namespaces', function()
| |
]]} ]]}
end) end)
it('redraws correctly when ns=0', function()
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
|
]]}
meths.set_hl(0, 'EndOfBuffer', {fg='#333333'})
screen:expect{grid=[[
^ |
{8:~ }|
{8:~ }|
{8:~ }|
{8:~ }|
{8:~ }|
{8:~ }|
{8:~ }|
{8:~ }|
|
]]}
end)
end) end)