vim-patch:8.2.4638: superfluous check if a redraw is needed for 'cursorline'

Problem:    Superfluous check if a redraw is needed for 'cursorline'.
Solution:   Remove check_redraw_cursorline(). (closes vim/vim#10030, closes vim/vim#10029)
3e559cd884

redraw_after_callback() is N/A.
Omits changes that just revert code from patch 8.2.4630.
This commit is contained in:
zeertzjq 2022-03-28 04:43:51 +08:00
parent a201dd265f
commit 4baeb96c1b
6 changed files with 152 additions and 26 deletions

View File

@ -95,7 +95,7 @@ static void comp_botline(win_T *wp)
win_check_anchored_floats(wp);
}
// Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is set.
/// Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is set.
void redraw_for_cursorline(win_T *wp)
FUNC_ATTR_NONNULL_ALL
{
@ -107,6 +107,22 @@ void redraw_for_cursorline(win_T *wp)
}
}
/// Redraw when w_virtcol changes and 'cursorcolumn' is set or 'cursorlineopt'
/// contains "screenline".
static void redraw_for_cursorcolumn(win_T *wp)
FUNC_ATTR_NONNULL_ALL
{
if ((wp->w_valid & VALID_VIRTCOL) == 0 && !pum_visible()) {
if (wp->w_p_cuc) {
// When 'cursorcolumn' is set need to redraw with SOME_VALID.
redraw_later(wp, SOME_VALID);
} else if (wp->w_p_cul && (wp->w_p_culopt_flags & CULOPT_SCRLINE)) {
// When 'cursorlineopt' contains "screenline" need to redraw with VALID.
redraw_later(wp, VALID);
}
}
}
/*
* Update curwin->w_topline and redraw if necessary.
* Used to update the screen before printing a message.
@ -623,11 +639,8 @@ void validate_virtcol_win(win_T *wp)
check_cursor_moved(wp);
if (!(wp->w_valid & VALID_VIRTCOL)) {
getvvcol(wp, &wp->w_cursor, NULL, &(wp->w_virtcol), NULL);
redraw_for_cursorcolumn(wp);
wp->w_valid |= VALID_VIRTCOL;
if (wp->w_p_cuc
&& !pum_visible()) {
redraw_later(wp, SOME_VALID);
}
}
}
@ -930,11 +943,7 @@ void curs_columns(win_T *wp, int may_scroll)
redraw_later(wp, NOT_VALID);
}
// Redraw when w_virtcol changes and 'cursorcolumn' is set
if (wp->w_p_cuc && (wp->w_valid & VALID_VIRTCOL) == 0
&& !pum_visible()) {
redraw_later(wp, SOME_VALID);
}
redraw_for_cursorcolumn(curwin);
// now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise
wp->w_valid_leftcol = wp->w_leftcol;

View File

@ -1295,9 +1295,6 @@ static void normal_redraw(NormalState *s)
redrawWinline(curwin, curwin->w_cursor.lnum);
}
// Might need to update for 'cursorline'.
check_redraw_cursorline();
if (VIsual_active) {
update_curbuf(INVERTED); // update inverted part
} else if (must_redraw) {

View File

@ -7617,16 +7617,3 @@ win_T *get_win_by_grid_handle(handle_T handle)
}
return NULL;
}
/// Check if the cursor moved and 'cursorline' is set. Mark for a VALID redraw
/// if needed.
void check_redraw_cursorline(void)
{
// When 'cursorlineopt' is "screenline" need to redraw always.
if (curwin->w_p_cul
&& (curwin->w_last_cursorline != curwin->w_cursor.lnum
|| (curwin->w_p_culopt_flags & CULOPT_SCRLINE))
&& !char_avail()) {
redraw_later(curwin, VALID);
}
}

View File

@ -597,6 +597,31 @@ func Test_cursorline_with_visualmode()
call delete('Xtest_cursorline_with_visualmode')
endfunc
func Test_cursorcolumn_callback()
CheckScreendump
CheckFeature timers
let lines =<< trim END
call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd'])
set cursorcolumn
call cursor(4, 5)
func Func(timer)
call cursor(1, 1)
endfunc
call timer_start(300, 'Func')
END
call writefile(lines, 'Xcuc_timer')
let buf = RunVimInTerminal('-S Xcuc_timer', #{rows: 8})
call TermWait(buf, 310)
call VerifyScreenDump(buf, 'Test_cursorcolumn_callback_1', {})
call StopVimInTerminal(buf)
call delete('Xcuc_timer')
endfunc
func Test_colorcolumn()
CheckScreendump

View File

@ -298,6 +298,31 @@ func Test_relativenumber_colors()
call delete('XTest_relnr')
endfunc
func Test_relativenumber_callback()
CheckScreendump
CheckFeature timers
let lines =<< trim END
call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd'])
set relativenumber
call cursor(4, 1)
func Func(timer)
call cursor(1, 1)
endfunc
call timer_start(300, 'Func')
END
call writefile(lines, 'Xrnu_timer')
let buf = RunVimInTerminal('-S Xrnu_timer', #{rows: 8})
call TermWait(buf, 310)
call VerifyScreenDump(buf, 'Test_relativenumber_callback_1', {})
call StopVimInTerminal(buf)
call delete('Xrnu_timer')
endfunc
" Test for displaying line numbers with 'rightleft'
func Test_number_rightleft()
CheckFeature rightleft

View File

@ -1266,6 +1266,49 @@ describe('CursorLine and CursorLineNr highlights', function()
end)
end)
describe('CursorColumn highlight', function()
before_each(clear)
it('is updated if cursor is moved from timer', function()
local screen = Screen.new(50, 8)
screen:set_default_attr_ids({
[1] = {background = Screen.colors.Gray90}, -- CursorColumn
[2] = {bold = true, foreground = Screen.colors.Blue1}, -- NonText
})
screen:attach()
exec([[
call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd'])
set cursorcolumn
call cursor(4, 5)
func Func(timer)
call cursor(1, 1)
endfunc
call timer_start(300, 'Func')
]])
screen:expect({grid = [[
aaaa{1:a} |
bbbb{1:b} |
cccc{1:c} |
dddd^d |
{2:~ }|
{2:~ }|
{2:~ }|
|
]], timeout = 100})
screen:expect({grid = [[
^aaaaa |
{1:b}bbbb |
{1:c}cccc |
{1:d}dddd |
{2:~ }|
{2:~ }|
{2:~ }|
|
]]})
end)
end)
describe('ColorColumn highlight', function()
local screen
@ -1570,6 +1613,46 @@ describe("'number' and 'relativenumber' highlight", function()
|
]])
end)
it('relative number highlight is updated if cursor is moved from timer', function()
local screen = Screen.new(50, 8)
screen:set_default_attr_ids({
[1] = {foreground = Screen.colors.Brown}, -- LineNr
[2] = {bold = true, foreground = Screen.colors.Blue1}, -- NonText
})
screen:attach()
exec([[
call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd'])
set relativenumber
call cursor(4, 1)
func Func(timer)
call cursor(1, 1)
endfunc
call timer_start(300, 'Func')
]])
screen:expect({grid = [[
{1: 3 }aaaaa |
{1: 2 }bbbbb |
{1: 1 }ccccc |
{1: 0 }^ddddd |
{2:~ }|
{2:~ }|
{2:~ }|
|
]], timeout = 100})
screen:expect({grid = [[
{1: 0 }^aaaaa |
{1: 1 }bbbbb |
{1: 2 }ccccc |
{1: 3 }ddddd |
{2:~ }|
{2:~ }|
{2:~ }|
|
]]})
end)
end)
describe("'winhighlight' highlight", function()