diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-02-25 00:43:06 -0500 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-03-01 20:02:10 -0500 |
commit | b376bb49b5a1f71b05389857f324bc6820ede747 (patch) | |
tree | 1f45ae705d8b3155247e44a86d4262c5b62707e2 | |
parent | c6481f70c22899604b7707299bb96d0f0768334f (diff) | |
download | rneovim-b376bb49b5a1f71b05389857f324bc6820ede747.tar.gz rneovim-b376bb49b5a1f71b05389857f324bc6820ede747.tar.bz2 rneovim-b376bb49b5a1f71b05389857f324bc6820ede747.zip |
vim-patch:8.1.1552: cursor position is wrong after sign column changes
Problem: Cursor position is wrong after sign column appears or disappears.
(Yegappan Lakshmanan)
Solution: Call changed_line_abv_curs() instead of changed_cline_bef_curs().
https://github.com/vim/vim/commit/f85e40afc204c241c6a01023be3e7b8101d36367
-rw-r--r-- | src/nvim/sign.c | 10 | ||||
-rw-r--r-- | src/nvim/testdir/test_signs.vim | 30 |
2 files changed, 35 insertions, 5 deletions
diff --git a/src/nvim/sign.c b/src/nvim/sign.c index baa9c6538f..079e95ada8 100644 --- a/src/nvim/sign.c +++ b/src/nvim/sign.c @@ -198,7 +198,7 @@ static void insert_sign( // column for signs. if (buf->b_signlist == NULL) { redraw_buf_later(buf, NOT_VALID); - changed_cline_bef_curs(); + changed_line_abv_curs(); } // first sign in signlist @@ -495,11 +495,11 @@ linenr_T buf_delsign( } } - // When deleted the last sign needs to redraw the windows to remove the - // sign column. + // When deleting the last sign the cursor position may change, because the + // sign columns no longer shows. And the 'signcolumn' may be hidden. if (buf->b_signlist == NULL) { redraw_buf_later(buf, NOT_VALID); - changed_cline_bef_curs(); + changed_line_abv_curs(); } return lnum; @@ -572,7 +572,7 @@ void buf_delete_signs(buf_T *buf, char_u *group) // When deleting the last sign need to redraw the windows to remove the // sign column. Not when curwin is NULL (this means we're exiting). if (buf->b_signlist != NULL && curwin != NULL) { - changed_cline_bef_curs(); + changed_line_abv_curs(); } lastp = &buf->b_signlist; diff --git a/src/nvim/testdir/test_signs.vim b/src/nvim/testdir/test_signs.vim index 6af81e15c5..dcbb546a2e 100644 --- a/src/nvim/testdir/test_signs.vim +++ b/src/nvim/testdir/test_signs.vim @@ -4,6 +4,8 @@ if !has('signs') finish endif +source screendump.vim + func Test_sign() new call setline(1, ['a', 'b', 'c', 'd']) @@ -1652,3 +1654,31 @@ func Test_sign_jump_func() sign undefine sign1 enew! | only! endfunc + +" Test for correct cursor position after the sign column appears or disappears. +func Test_sign_cursor_position() + if !CanRunVimInTerminal() + throw 'Skipped: cannot make screendumps' + endif + + let lines =<< trim END + call setline(1, [repeat('x', 75), 'mmmm', 'yyyy']) + call cursor(2,1) + sign define s1 texthl=Search text==> + redraw + sign place 10 line=2 name=s1 + END + call writefile(lines, 'XtestSigncolumn') + let buf = RunVimInTerminal('-S XtestSigncolumn', {'rows': 6}) + call VerifyScreenDump(buf, 'Test_sign_cursor_01', {}) + + " update cursor position calculation + call term_sendkeys(buf, "lh") + call term_sendkeys(buf, ":sign unplace 10\<CR>") + call VerifyScreenDump(buf, 'Test_sign_cursor_02', {}) + + + " clean up + call StopVimInTerminal(buf) + call delete('XtestSigncolumn') +endfunc |