summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-06-16 13:55:40 +0200
committerBram Moolenaar <Bram@vim.org>2019-06-16 13:55:40 +0200
commitf85e40afc204c241c6a01023be3e7b8101d36367 (patch)
tree15c6e38573537bc8fc12e9733f126b69a0c65e7d
parent6c17543b5634ccccedfbffa4993e9fbd4a990067 (diff)
downloadvim-git-f85e40afc204c241c6a01023be3e7b8101d36367.tar.gz
patch 8.1.1552: cursor position is wrong after sign column changesv8.1.1552
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().
-rw-r--r--src/sign.c6
-rw-r--r--src/testdir/dumps/Test_sign_cursor_01.dump6
-rw-r--r--src/testdir/dumps/Test_sign_cursor_02.dump6
-rw-r--r--src/testdir/test_signs.vim30
-rw-r--r--src/version.c2
5 files changed, 47 insertions, 3 deletions
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\<CR>")
+ 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
@@ -778,6 +778,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1552,
+/**/
1551,
/**/
1550,