changeset 17105:811c5c2f5236 v8.1.1552

patch 8.1.1552: cursor position is wrong after sign column changes commit https://github.com/vim/vim/commit/f85e40afc204c241c6a01023be3e7b8101d36367 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 16 13:55:40 2019 +0200 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().
author Bram Moolenaar <Bram@vim.org>
date Sun, 16 Jun 2019 14:00:07 +0200
parents 06811bf5d3b9
children 32af152d94b1
files src/sign.c src/testdir/dumps/Test_sign_cursor_01.dump src/testdir/dumps/Test_sign_cursor_02.dump src/testdir/test_signs.vim src/version.c
diffstat 5 files changed, 47 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 *gro
     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;
new file mode 100644
--- /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| 
new file mode 100644
--- /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| 
--- 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\<CR>")
+  call VerifyScreenDump(buf, 'Test_sign_cursor_02', {})
+
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XtestSigncolumn')
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1552,
+/**/
     1551,
 /**/
     1550,