mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
Merge pull request #20665 from lewis6991/fix/decor_redraw
This commit is contained in:
@@ -978,12 +978,33 @@ win_update_start:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buf_T *buf = wp->w_buffer;
|
||||||
|
|
||||||
|
// reset got_int, otherwise regexp won't work
|
||||||
|
int save_got_int = got_int;
|
||||||
|
got_int = 0;
|
||||||
|
// Set the time limit to 'redrawtime'.
|
||||||
|
proftime_T syntax_tm = profile_setlimit(p_rdt);
|
||||||
|
syn_set_timeout(&syntax_tm);
|
||||||
|
|
||||||
|
win_extmark_arr.size = 0;
|
||||||
|
|
||||||
|
decor_redraw_reset(buf, &decor_state);
|
||||||
|
|
||||||
|
DecorProviders line_providers;
|
||||||
|
decor_providers_invoke_win(wp, providers, &line_providers, &provider_err);
|
||||||
|
if (must_redraw != 0) {
|
||||||
|
must_redraw = 0;
|
||||||
|
if (!called_decor_providers) {
|
||||||
|
called_decor_providers = true;
|
||||||
|
goto win_update_start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
redraw_win_signcol(wp);
|
redraw_win_signcol(wp);
|
||||||
|
|
||||||
init_search_hl(wp, &screen_search_hl);
|
init_search_hl(wp, &screen_search_hl);
|
||||||
|
|
||||||
buf_T *buf = wp->w_buffer;
|
|
||||||
|
|
||||||
// Force redraw when width of 'number' or 'relativenumber' column
|
// Force redraw when width of 'number' or 'relativenumber' column
|
||||||
// changes.
|
// changes.
|
||||||
int nrwidth = (wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) : 0;
|
int nrwidth = (wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) : 0;
|
||||||
@@ -1496,28 +1517,6 @@ win_update_start:
|
|||||||
wp->w_old_visual_col = 0;
|
wp->w_old_visual_col = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset got_int, otherwise regexp won't work
|
|
||||||
int save_got_int = got_int;
|
|
||||||
got_int = 0;
|
|
||||||
// Set the time limit to 'redrawtime'.
|
|
||||||
proftime_T syntax_tm = profile_setlimit(p_rdt);
|
|
||||||
syn_set_timeout(&syntax_tm);
|
|
||||||
|
|
||||||
win_extmark_arr.size = 0;
|
|
||||||
|
|
||||||
decor_redraw_reset(buf, &decor_state);
|
|
||||||
|
|
||||||
DecorProviders line_providers;
|
|
||||||
decor_providers_invoke_win(wp, providers, &line_providers, &provider_err);
|
|
||||||
(void)win_signcol_count(wp); // check if provider changed signcol width
|
|
||||||
if (must_redraw != 0) {
|
|
||||||
must_redraw = 0;
|
|
||||||
if (!called_decor_providers) {
|
|
||||||
called_decor_providers = true;
|
|
||||||
goto win_update_start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cursorline_standout = win_cursorline_standout(wp);
|
bool cursorline_standout = win_cursorline_standout(wp);
|
||||||
|
|
||||||
win_check_ns_hl(wp);
|
win_check_ns_hl(wp);
|
||||||
|
@@ -564,6 +564,7 @@ describe('extmark decorations', function()
|
|||||||
[24] = {bold = true};
|
[24] = {bold = true};
|
||||||
[25] = {background = Screen.colors.LightRed};
|
[25] = {background = Screen.colors.LightRed};
|
||||||
[26] = {background=Screen.colors.DarkGrey, foreground=Screen.colors.LightGrey};
|
[26] = {background=Screen.colors.DarkGrey, foreground=Screen.colors.LightGrey};
|
||||||
|
[27] = {background = Screen.colors.Plum1};
|
||||||
}
|
}
|
||||||
|
|
||||||
ns = meths.create_namespace 'test'
|
ns = meths.create_namespace 'test'
|
||||||
@@ -959,6 +960,55 @@ end]]
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('avoids redraw issue #20651', function()
|
||||||
|
exec_lua[[
|
||||||
|
vim.cmd.normal'10oXXX'
|
||||||
|
vim.cmd.normal'gg'
|
||||||
|
local ns = vim.api.nvim_create_namespace('ns')
|
||||||
|
|
||||||
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
||||||
|
vim.api.nvim_open_win(bufnr, false, { relative = 'win', height = 1, width = 1, row = 0, col = 0 })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('CursorMoved', { callback = function()
|
||||||
|
local row = vim.api.nvim_win_get_cursor(0)[1] - 1
|
||||||
|
vim.api.nvim_buf_set_extmark(0, ns, row, 0, { id = 1 })
|
||||||
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, {})
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.api.nvim_buf_set_extmark(0, ns, row, 0, {
|
||||||
|
id = 1,
|
||||||
|
virt_text = {{'HELLO', 'Normal'}},
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
]]
|
||||||
|
|
||||||
|
for _ = 1, 3 do
|
||||||
|
helpers.sleep(10)
|
||||||
|
feed 'j'
|
||||||
|
end
|
||||||
|
|
||||||
|
screen:expect{grid=[[
|
||||||
|
{27: } |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
^XXX HELLO |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
XXX |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
|
||||||
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('decorations: virtual lines', function()
|
describe('decorations: virtual lines', function()
|
||||||
|
Reference in New Issue
Block a user