mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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:
parent
a201dd265f
commit
4baeb96c1b
@ -95,7 +95,7 @@ static void comp_botline(win_T *wp)
|
|||||||
win_check_anchored_floats(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)
|
void redraw_for_cursorline(win_T *wp)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
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.
|
* Update curwin->w_topline and redraw if necessary.
|
||||||
* Used to update the screen before printing a message.
|
* Used to update the screen before printing a message.
|
||||||
@ -623,11 +639,8 @@ void validate_virtcol_win(win_T *wp)
|
|||||||
check_cursor_moved(wp);
|
check_cursor_moved(wp);
|
||||||
if (!(wp->w_valid & VALID_VIRTCOL)) {
|
if (!(wp->w_valid & VALID_VIRTCOL)) {
|
||||||
getvvcol(wp, &wp->w_cursor, NULL, &(wp->w_virtcol), NULL);
|
getvvcol(wp, &wp->w_cursor, NULL, &(wp->w_virtcol), NULL);
|
||||||
|
redraw_for_cursorcolumn(wp);
|
||||||
wp->w_valid |= VALID_VIRTCOL;
|
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_later(wp, NOT_VALID);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redraw when w_virtcol changes and 'cursorcolumn' is set
|
redraw_for_cursorcolumn(curwin);
|
||||||
if (wp->w_p_cuc && (wp->w_valid & VALID_VIRTCOL) == 0
|
|
||||||
&& !pum_visible()) {
|
|
||||||
redraw_later(wp, SOME_VALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
// now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise
|
// now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise
|
||||||
wp->w_valid_leftcol = wp->w_leftcol;
|
wp->w_valid_leftcol = wp->w_leftcol;
|
||||||
|
@ -1295,9 +1295,6 @@ static void normal_redraw(NormalState *s)
|
|||||||
redrawWinline(curwin, curwin->w_cursor.lnum);
|
redrawWinline(curwin, curwin->w_cursor.lnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Might need to update for 'cursorline'.
|
|
||||||
check_redraw_cursorline();
|
|
||||||
|
|
||||||
if (VIsual_active) {
|
if (VIsual_active) {
|
||||||
update_curbuf(INVERTED); // update inverted part
|
update_curbuf(INVERTED); // update inverted part
|
||||||
} else if (must_redraw) {
|
} else if (must_redraw) {
|
||||||
|
@ -7617,16 +7617,3 @@ win_T *get_win_by_grid_handle(handle_T handle)
|
|||||||
}
|
}
|
||||||
return NULL;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -597,6 +597,31 @@ func Test_cursorline_with_visualmode()
|
|||||||
call delete('Xtest_cursorline_with_visualmode')
|
call delete('Xtest_cursorline_with_visualmode')
|
||||||
endfunc
|
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()
|
func Test_colorcolumn()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
|
|
||||||
|
@ -298,6 +298,31 @@ func Test_relativenumber_colors()
|
|||||||
call delete('XTest_relnr')
|
call delete('XTest_relnr')
|
||||||
endfunc
|
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'
|
" Test for displaying line numbers with 'rightleft'
|
||||||
func Test_number_rightleft()
|
func Test_number_rightleft()
|
||||||
CheckFeature rightleft
|
CheckFeature rightleft
|
||||||
|
@ -1266,6 +1266,49 @@ describe('CursorLine and CursorLineNr highlights', function()
|
|||||||
end)
|
end)
|
||||||
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()
|
describe('ColorColumn highlight', function()
|
||||||
local screen
|
local screen
|
||||||
|
|
||||||
@ -1570,6 +1613,46 @@ describe("'number' and 'relativenumber' highlight", function()
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end)
|
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)
|
end)
|
||||||
|
|
||||||
describe("'winhighlight' highlight", function()
|
describe("'winhighlight' highlight", function()
|
||||||
|
Loading…
Reference in New Issue
Block a user