vim-patch:8.2.4630: 'cursorline' not always updated with 'culopt' is "screenline"

Problem:    'cursorline' not always updated with 'cursorlineopt' is
            "screenline".
Solution:   Call check_redraw_cursorline() more often. (closes vim/vim#10013)
bf269ed0b0

Code was reverted in patch 8.2.4638, so this just ports the test.
This commit is contained in:
zeertzjq
2022-03-28 05:10:15 +08:00
parent 4baeb96c1b
commit ab02b28b4e
2 changed files with 70 additions and 10 deletions

View File

@@ -293,5 +293,26 @@ func Test_cursorline_callback()
call delete('Xcul_timer') call delete('Xcul_timer')
endfunc endfunc
func Test_cursorline_screenline_update()
CheckScreendump
let lines =<< trim END
call setline(1, repeat('xyz ', 30))
set cursorline cursorlineopt=screenline
inoremap <F2> <Cmd>call cursor(1, 1)<CR>
END
call writefile(lines, 'Xcul_screenline')
let buf = RunVimInTerminal('-S Xcul_screenline', #{rows: 8})
call term_sendkeys(buf, "A")
call VerifyScreenDump(buf, 'Test_cursorline_screenline_1', {})
call term_sendkeys(buf, "\<F2>")
call VerifyScreenDump(buf, 'Test_cursorline_screenline_2', {})
call term_sendkeys(buf, "\<Esc>")
call StopVimInTerminal(buf)
call delete('Xcul_screenline')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -937,17 +937,18 @@ describe('CursorLine and CursorLineNr highlights', function()
[2] = {foreground = Screen.colors.Yellow}; [2] = {foreground = Screen.colors.Yellow};
[3] = {foreground = Screen.colors.Red, background = Screen.colors.Green}; [3] = {foreground = Screen.colors.Red, background = Screen.colors.Green};
[4] = {foreground = Screen.colors.Green, background = Screen.colors.Red}; [4] = {foreground = Screen.colors.Green, background = Screen.colors.Red};
[5] = {bold = true}, -- ModeMsg
}) })
screen:attach() screen:attach()
feed_command('set wrap cursorline cursorlineopt=screenline') command('set wrap cursorline cursorlineopt=screenline')
feed_command('set showbreak=>>>') command('set showbreak=>>>')
feed_command('highlight clear NonText') command('highlight clear NonText')
feed_command('highlight clear CursorLine') command('highlight clear CursorLine')
feed_command('highlight NonText guifg=Yellow gui=NONE') command('highlight NonText guifg=Yellow gui=NONE')
feed_command('highlight LineNr guifg=Red guibg=Green gui=NONE') command('highlight LineNr guifg=Red guibg=Green gui=NONE')
feed_command('highlight CursorLine guifg=Black guibg=White gui=NONE') command('highlight CursorLine guifg=Black guibg=White gui=NONE')
feed_command('highlight CursorLineNr guifg=Green guibg=Red gui=NONE') command('highlight CursorLineNr guifg=Green guibg=Red gui=NONE')
feed('30iø<esc>o<esc>30ia<esc>') feed('30iø<esc>o<esc>30ia<esc>')
@@ -977,7 +978,7 @@ describe('CursorLine and CursorLineNr highlights', function()
]]) ]])
-- CursorLineNr should not apply to line number when 'cursorlineopt' does not contain "number" -- CursorLineNr should not apply to line number when 'cursorlineopt' does not contain "number"
feed_command('set relativenumber numberwidth=2') command('set relativenumber numberwidth=2')
screen:expect([[ screen:expect([[
{3:0 }{1:øøøøøøøøøøøø^øøøøøø}| {3:0 }{1:øøøøøøøøøøøø^øøøøøø}|
{3: }{2:>>>}øøøøøøøøøøøø | {3: }{2:>>>}øøøøøøøøøøøø |
@@ -987,7 +988,7 @@ describe('CursorLine and CursorLineNr highlights', function()
]]) ]])
-- CursorLineNr should apply to line number when 'cursorlineopt' contains "number" -- CursorLineNr should apply to line number when 'cursorlineopt' contains "number"
feed_command('set cursorlineopt+=number') command('set cursorlineopt+=number')
screen:expect([[ screen:expect([[
{4:0 }{1:øøøøøøøøøøøø^øøøøøø}| {4:0 }{1:øøøøøøøøøøøø^øøøøøø}|
{3: }{2:>>>}øøøøøøøøøøøø | {3: }{2:>>>}øøøøøøøøøøøø |
@@ -1019,6 +1020,44 @@ describe('CursorLine and CursorLineNr highlights', function()
{3: }{2:>>>}{1:aaaaaaaaa^aaa }| {3: }{2:>>>}{1:aaaaaaaaa^aaa }|
| |
]]) ]])
-- updated in Insert mode
feed('I')
screen:expect([[
{3:1 }øøøøøøøøøøøøøøøøøø|
{3: }{2:>>>}øøøøøøøøøøøø |
{4:0 }{1:^aaaaaaaaaaaaaaaaaa}|
{3: }{2:>>>}aaaaaaaaaaaa |
{5:-- INSERT --} |
]])
feed('<Esc>gg')
screen:expect([[
{4:0 }{1:^øøøøøøøøøøøøøøøøøø}|
{3: }{2:>>>}øøøøøøøøøøøø |
{3:1 }aaaaaaaaaaaaaaaaaa|
{3: }{2:>>>}aaaaaaaaaaaa |
|
]])
command('inoremap <F2> <Cmd>call cursor(1, 1)<CR>')
feed('A')
screen:expect([[
{4:0 }øøøøøøøøøøøøøøøøøø|
{3: }{2:>>>}{1:øøøøøøøøøøøø^ }|
{3:1 }aaaaaaaaaaaaaaaaaa|
{3: }{2:>>>}aaaaaaaaaaaa |
{5:-- INSERT --} |
]])
feed('<F2>')
screen:expect([[
{4:0 }{1:^øøøøøøøøøøøøøøøøøø}|
{3: }{2:>>>}øøøøøøøøøøøø |
{3:1 }aaaaaaaaaaaaaaaaaa|
{3: }{2:>>>}aaaaaaaaaaaa |
{5:-- INSERT --} |
]])
end) end)
it('always updated. vim-patch:8.1.0849', function() it('always updated. vim-patch:8.1.0849', function()