From c93fd83df206c2438a735d6d99e640db1976f2f0 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 9 Oct 2022 18:48:32 +0800 Subject: vim-patch:9.0.0697: cursor in wrong position with Visual substitute Problem: Cursor in wrong position with Visual substitute. Solution: When restoring 'linebreak' mark the virtual column as invalid. (closes vim/vim#11309, closes vim/vim#11311) https://github.com/vim/vim/commit/16dab41537ae206f4cab676ad53edbae5fd5fb45 N/A patches for version.c: vim-patch:9.0.0699: tiny build fails Problem: Tiny build fails. Solution: Add #ifdef. https://github.com/vim/vim/commit/bf499c0e6f30a94fe062f83ea0190f93178d0d74 --- src/nvim/testdir/test_listlbr.vim | 21 +++++++++++++++++++++ src/nvim/testdir/test_visual.vim | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) (limited to 'src/nvim/testdir') diff --git a/src/nvim/testdir/test_listlbr.vim b/src/nvim/testdir/test_listlbr.vim index affa0f96fa..8598c0d963 100644 --- a/src/nvim/testdir/test_listlbr.vim +++ b/src/nvim/testdir/test_listlbr.vim @@ -7,6 +7,7 @@ CheckOption linebreak CheckFeature conceal source view_util.vim +source screendump.vim function s:screen_lines(lnum, width) abort return ScreenLines(a:lnum, a:width) @@ -133,6 +134,26 @@ func Test_linebreak_with_visual_operations() call s:close_windows() endfunc +func Test_linebreak_reset_restore() + CheckScreendump + + let lines =<< trim END + vim9script + &linebreak = true + &showcmd = true + &showmode = false + ('a'->repeat(&columns - 10) .. ' ' .. 'b'->repeat(10) .. ' c')->setline(1) + END + call writefile(lines, 'XlbrResetRestore', 'D') + let buf = RunVimInTerminal('-S XlbrResetRestore', {'rows': 8}) + + call term_sendkeys(buf, '$v$s') + call VerifyScreenDump(buf, 'Test_linebreak_reset_restore_1', {}) + + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) +endfunc + func Test_virtual_block() call s:test_windows('setl sbr=+') call setline(1, [ diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim index 9c1ad0c099..faa6b2c1c3 100644 --- a/src/nvim/testdir/test_visual.vim +++ b/src/nvim/testdir/test_visual.vim @@ -1492,5 +1492,37 @@ func Test_switch_buffer_ends_visual_mode() exe 'bwipe!' buf2 endfunc +" Test that cursor is drawn at correct position after an operator in Visual +" mode when 'linebreak' and 'showcmd' are enabled. +func Test_visual_operator_with_linebreak() + CheckRunVimInTerminal + + let lines =<< trim END + set linebreak showcmd noshowmode + call setline(1, repeat('a', &columns - 10) .. ' bbbbbbbbbb c') + END + call writefile(lines, 'XTest_visual_op_linebreak', 'D') + + let buf = RunVimInTerminal('-S XTest_visual_op_linebreak', {'rows': 6}) + + call term_sendkeys(buf, '$v$') + call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])}) + call term_sendkeys(buf, 'zo') + call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])}) + + call term_sendkeys(buf, "$\$") + call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])}) + call term_sendkeys(buf, 'I') + call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])}) + + call term_sendkeys(buf, "\$v$") + call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])}) + call term_sendkeys(buf, 's') + call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])}) + + " clean up + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) +endfunc " vim: shiftwidth=2 sts=2 expandtab -- cgit