vim-patch:9.0.1785: wrong cursor position with 'showbreak' and lcs-eol (#24852)

Problem:  wrong cursor position with 'showbreak' and lcs-eol
Solution: Add size of 'showbreak' before when 'listchars' "eol" is used.
          Also fix wrong cursor position with wrapping virtual text on
          empty line and 'showbreak'.

closes: vim/vim#12891

1193951beb
This commit is contained in:
zeertzjq
2023-08-24 07:19:18 +08:00
committed by GitHub
parent dc45fb4655
commit 466c18b818
5 changed files with 72 additions and 46 deletions

View File

@@ -1,6 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local command = helpers.command
local exec = helpers.exec
local feed = helpers.feed
@@ -17,20 +18,15 @@ describe('breakindent', function()
})
screen:attach()
exec([[
set listchars=eol:$
let &signcolumn = 'yes'
let &showbreak = '+'
let &showbreak = '++'
let &breakindent = v:true
let &breakindentopt = 'shift:2'
let leftcol = win_getid()->getwininfo()->get(0, {})->get('textoff')
eval repeat('x', &columns - leftcol - 1)->setline(1)
eval 'second line'->setline(2)
]])
screen:expect([[
{1: }^xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
{1: }second line |
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
feed('AX')
screen:expect([[
{1: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX|
@@ -40,5 +36,18 @@ describe('breakindent', function()
{0:~ }|
{2:-- INSERT --} |
]])
-- No line wraps, so changing 'showbreak' should lead to the same screen.
command('setlocal showbreak=+')
screen:expect_unchanged()
-- The first line now wraps because of "eol" in 'listchars'.
command('setlocal list')
screen:expect{grid=[[
{1: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX|
{1: } {0:+^$} |
{1: }second line{0:$} |
{0:~ }|
{0:~ }|
{2:-- INSERT --} |
]]}
end)
end)

View File

@@ -2886,6 +2886,15 @@ bbbbbbb]])
{1:~ }|
|
]]}
feed('zbx')
screen:expect{grid=[[
1 ^12312312312312312312312312|
{1:+}31231231231231231231231|
{1:+}23123123123123123123 |
{1:~ }|
{1:~ }|
|
]]}
end
describe('with showbreak, smoothscroll', function()

View File

@@ -937,7 +937,9 @@ func Test_cursor_position_with_showbreak()
let lines =<< trim END
vim9script
&signcolumn = 'yes'
&showbreak = '+ '
&showbreak = '++'
&breakindent = true
&breakindentopt = 'shift:2'
var leftcol: number = win_getid()->getwininfo()->get(0, {})->get('textoff')
repeat('x', &columns - leftcol - 1)->setline(1)
'second line'->setline(2)
@@ -946,7 +948,13 @@ func Test_cursor_position_with_showbreak()
let buf = RunVimInTerminal('-S XscriptShowbreak', #{rows: 6})
call term_sendkeys(buf, "AX")
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak', {})
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
" No line wraps, so changing 'showbreak' should lead to the same screen.
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal showbreak=+\<CR>")
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
" The first line now wraps because of "eol" in 'listchars'.
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal list\<CR>")
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_2', {})
call StopVimInTerminal(buf)
endfunc