diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-08-18 15:00:03 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-08-18 19:34:16 +0800 |
commit | 551998b7eed7dd411e4d14f65b108ae8a93c4081 (patch) | |
tree | 3121aa578a285678a58e2dbd1ed578750a284d95 /test | |
parent | b0dda500e9b45e39e872d76e8b753933c5467f83 (diff) | |
download | rneovim-551998b7eed7dd411e4d14f65b108ae8a93c4081.tar.gz rneovim-551998b7eed7dd411e4d14f65b108ae8a93c4081.tar.bz2 rneovim-551998b7eed7dd411e4d14f65b108ae8a93c4081.zip |
vim-patch:9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Problem: Wrong cursor position when clicking after concealed text
with 'virtualedit'.
Solution: Store virtual columns in ScreenCols[] instead of text
columns, and always use coladvance() when clicking.
This also fixes incorrect curswant when clicking on a TAB, so now
Test_normal_click_on_ctrl_char() asserts the same results as the ones
before patch 9.0.0048.
closes: vim/vim#12808
https://github.com/vim/vim/commit/e500ae8e29ad921378085f5d70ee5c0c537be1ba
Remove the mouse_adjust_click() function.
There is a difference in behavior with the old mouse_adjust_click()
approach: when clicking on the character immediately after concealed
text that is completely hidden, cursor is put on the clicked character
rather than at the start of the concealed text. The new behavior is
better, but it causes unnecessary scrolling in a functional test (which
is an existing issue unrelated to these patches), so adjust the test.
Now fully merged:
vim-patch:9.0.0177: cursor position wrong with 'virtualedit' and mouse click
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/ui/mouse_spec.lua | 3 | ||||
-rw-r--r-- | test/old/testdir/test_conceal.vim | 49 | ||||
-rw-r--r-- | test/old/testdir/test_normal.vim | 10 | ||||
-rw-r--r-- | test/old/testdir/test_virtualedit.vim | 6 |
4 files changed, 60 insertions, 8 deletions
diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua index d126e27cde..657cc0c325 100644 --- a/test/functional/ui/mouse_spec.lua +++ b/test/functional/ui/mouse_spec.lua @@ -1089,7 +1089,6 @@ describe('ui/mouse/input', function() command([[setlocal concealcursor=ni nowrap shiftwidth=2 tabstop=4 list listchars=tab:>-]]) command([[syntax region X0 matchgroup=X1 start=/\*/ end=/\*/ concealends contains=X2]]) command([[syntax match X2 /cats/ conceal cchar=X contained]]) - -- No heap-use-after-free with multi-line syntax pattern #24317 command([[syntax match X3 /\n\@<=x/ conceal cchar=>]]) command([[highlight link X0 Normal]]) command([[highlight link X1 NonText]]) @@ -1497,7 +1496,6 @@ describe('ui/mouse/input', function() ]]) end) -- level 2 - wrapped - it('(level 3) click on non-wrapped lines', function() feed_command('let &conceallevel=3', 'echo') @@ -1535,6 +1533,7 @@ describe('ui/mouse/input', function() ]]) feed('<esc><LeftMouse><20,2>') + feed('zH') -- FIXME: unnecessary horizontal scrolling screen:expect([[ Section{0:>>--->--->---}t1 | {0:>--->--->---} t2 t3 t4 | diff --git a/test/old/testdir/test_conceal.vim b/test/old/testdir/test_conceal.vim index b9541b9e82..0ec171aa2f 100644 --- a/test/old/testdir/test_conceal.vim +++ b/test/old/testdir/test_conceal.vim @@ -349,9 +349,56 @@ func Test_conceal_mouse_click() call Ntest_setmouse(1, 16) call feedkeys("\<LeftMouse>", "tx") call assert_equal([0, 1, 20, 0, 20], getcurpos()) + " click on 'e' of "here" puts cursor there + call Ntest_setmouse(1, 19) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 23], getcurpos()) + " click after end of line puts cursor on 'e' without 'virtualedit' + call Ntest_setmouse(1, 20) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 24], getcurpos()) + call Ntest_setmouse(1, 21) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 25], getcurpos()) + call Ntest_setmouse(1, 22) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 26], getcurpos()) + call Ntest_setmouse(1, 31) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 35], getcurpos()) + call Ntest_setmouse(1, 32) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 36], getcurpos()) + + set virtualedit=all + redraw " Nvim: redraw_for_cursorcolumn() redraws for conceal + " click on 'h' of "here" puts cursor there + call Ntest_setmouse(1, 16) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 20, 0, 20], getcurpos()) + " click on 'e' of "here" puts cursor there + call Ntest_setmouse(1, 19) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 23], getcurpos()) + " click after end of line puts cursor there without 'virtualedit' + call Ntest_setmouse(1, 20) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 0, 24], getcurpos()) + call Ntest_setmouse(1, 21) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 1, 25], getcurpos()) + call Ntest_setmouse(1, 22) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 2, 26], getcurpos()) + call Ntest_setmouse(1, 31) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 11, 35], getcurpos()) + call Ntest_setmouse(1, 32) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 12, 36], getcurpos()) bwipe! - set mouse& + set mouse& virtualedit& endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/test/old/testdir/test_normal.vim b/test/old/testdir/test_normal.vim index 57b68bcbb6..c022133b4f 100644 --- a/test/old/testdir/test_normal.vim +++ b/test/old/testdir/test_normal.vim @@ -4062,13 +4062,13 @@ func Test_normal_click_on_ctrl_char() call assert_equal([0, 1, 1, 0, 1], getcurpos()) call Ntest_setmouse(1, 2) call feedkeys("\<LeftMouse>", 'xt') - call assert_equal([0, 1, 2, 0, 8], getcurpos()) + call assert_equal([0, 1, 2, 0, 2], getcurpos()) call Ntest_setmouse(1, 3) call feedkeys("\<LeftMouse>", 'xt') - call assert_equal([0, 1, 2, 0, 8], getcurpos()) + call assert_equal([0, 1, 2, 0, 3], getcurpos()) call Ntest_setmouse(1, 7) call feedkeys("\<LeftMouse>", 'xt') - call assert_equal([0, 1, 2, 0, 8], getcurpos()) + call assert_equal([0, 1, 2, 0, 7], getcurpos()) call Ntest_setmouse(1, 8) call feedkeys("\<LeftMouse>", 'xt') call assert_equal([0, 1, 2, 0, 8], getcurpos()) @@ -4080,13 +4080,13 @@ func Test_normal_click_on_ctrl_char() call assert_equal([0, 1, 4, 0, 10], getcurpos()) call Ntest_setmouse(1, 11) call feedkeys("\<LeftMouse>", 'xt') - call assert_equal([0, 1, 4, 0, 10], getcurpos()) + call assert_equal([0, 1, 4, 0, 11], getcurpos()) call Ntest_setmouse(1, 12) call feedkeys("\<LeftMouse>", 'xt') call assert_equal([0, 1, 5, 0, 12], getcurpos()) call Ntest_setmouse(1, 13) call feedkeys("\<LeftMouse>", 'xt') - call assert_equal([0, 1, 5, 0, v:maxcol], getcurpos()) + call assert_equal([0, 1, 5, 0, 13], getcurpos()) bwipe! let &mouse = save_mouse diff --git a/test/old/testdir/test_virtualedit.vim b/test/old/testdir/test_virtualedit.vim index a2baf276ac..f97b3f987d 100644 --- a/test/old/testdir/test_virtualedit.vim +++ b/test/old/testdir/test_virtualedit.vim @@ -586,6 +586,12 @@ func Test_virtualedit_mouse() call Ntest_setmouse(1, 9) call feedkeys("\<LeftMouse>", "xt") call assert_equal([0, 1, 6, 0, 9], getcurpos()) + call Ntest_setmouse(1, 12) + call feedkeys("\<LeftMouse>", "xt") + call assert_equal([0, 1, 9, 0, 12], getcurpos()) + call Ntest_setmouse(1, 13) + call feedkeys("\<LeftMouse>", "xt") + call assert_equal([0, 1, 10, 0, 13], getcurpos()) call Ntest_setmouse(1, 15) call feedkeys("\<LeftMouse>", "xt") call assert_equal([0, 1, 10, 2, 15], getcurpos()) |