From: Bram Moolenaar Date: Sun, 16 Jun 2019 11:55:40 +0000 (+0200) Subject: patch 8.1.1552: cursor position is wrong after sign column changes X-Git-Tag: v8.1.1552 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f85e40afc204c241c6a01023be3e7b8101d36367;p=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(). --- diff --git a/src/sign.c b/src/sign.c index e8288d628..240785385 100644 --- a/src/sign.c +++ b/src/sign.c @@ -231,7 +231,7 @@ insert_sign( if (buf->b_signlist == NULL) { redraw_buf_later(buf, NOT_VALID); - changed_cline_bef_curs(); + changed_line_abv_curs(); } // first sign in signlist @@ -531,7 +531,7 @@ buf_delsign( if (buf->b_signlist == NULL) { redraw_buf_later(buf, NOT_VALID); - changed_cline_bef_curs(); + changed_line_abv_curs(); } return lnum; @@ -651,7 +651,7 @@ buf_delete_signs(buf_T *buf, char_u *group) if (buf->b_signlist != NULL && curwin != NULL) { redraw_buf_later(buf, NOT_VALID); - changed_cline_bef_curs(); + changed_line_abv_curs(); } lastp = &buf->b_signlist; diff --git a/src/testdir/dumps/Test_sign_cursor_01.dump b/src/testdir/dumps/Test_sign_cursor_01.dump new file mode 100644 index 000000000..9ca448193 --- /dev/null +++ b/src/testdir/dumps/Test_sign_cursor_01.dump @@ -0,0 +1,6 @@ +| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @70 +|=+0&#ffff4012|>>m+0&#ffffff0@3| @68 +| +0#0000e05#a8a8a8255@1|y+0#0000000#ffffff0@3| @68 +|~+0#4040ff13&| @73 +| +0#0000000&@56|2|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_sign_cursor_02.dump b/src/testdir/dumps/Test_sign_cursor_02.dump new file mode 100644 index 000000000..92643c327 --- /dev/null +++ b/src/testdir/dumps/Test_sign_cursor_02.dump @@ -0,0 +1,6 @@ +|x+0&#ffffff0@74 +>m@3| @70 +|y@3| @70 +|~+0#4040ff13&| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e| |1|0| @40|2|,|1| @10|A|l@1| diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim index 3b17eccf0..140aa8234 100644 --- a/src/testdir/test_signs.vim +++ b/src/testdir/test_signs.vim @@ -3,6 +3,8 @@ source check.vim CheckFeature signs +source screendump.vim + func Test_sign() new call setline(1, ['a', 'b', 'c', 'd']) @@ -1706,3 +1708,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\") + call VerifyScreenDump(buf, 'Test_sign_cursor_02', {}) + + + " clean up + call StopVimInTerminal(buf) + call delete('XtestSigncolumn') +endfunc diff --git a/src/version.c b/src/version.c index b213bda11..f960d52fa 100644 --- a/src/version.c +++ b/src/version.c @@ -777,6 +777,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1552, /**/ 1551, /**/