summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-03-09 11:46:15 +0100
committerBram Moolenaar <Bram@vim.org>2019-03-09 11:46:15 +0100
commit8156ed37558231a8167a1a61a147713d84c9af59 (patch)
treebc5a5e5b636c6f4d67e3c18ba07266e648f3f93e
parentfd731b0e31df9f167098c4a77ff894fea6cb7f5c (diff)
patch 8.1.1001: Visual area not correct when using 'cursorline'v8.1.1001
Problem: Visual area not correct when using 'cursorline'. Solution: Update w_last_cursorline also in Visual mode. (Hirohito Higashi, closes #4086)
-rw-r--r--src/screen.c16
-rw-r--r--src/testdir/dumps/Test_cursorline_with_visualmode_01.dump12
-rw-r--r--src/testdir/test_highlight.vim20
-rw-r--r--src/version.c2
4 files changed, 43 insertions, 7 deletions
diff --git a/src/screen.c b/src/screen.c
index eabf7c1868..111c77d8a0 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3704,14 +3704,16 @@ win_line(
#endif
#ifdef FEAT_SYN_HL
- /* Cursor line highlighting for 'cursorline' in the current window. Not
- * when Visual mode is active, because it's not clear what is selected
- * then. */
- if (wp->w_p_cul && lnum == wp->w_cursor.lnum
- && !(wp == curwin && VIsual_active))
+ // Cursor line highlighting for 'cursorline' in the current window.
+ if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
{
- line_attr = HL_ATTR(HLF_CUL);
- area_highlighting = TRUE;
+ // Do not show the cursor line when Visual mode is active, because it's
+ // not clear what is selected then. Do update w_last_cursorline.
+ if (!(wp == curwin && VIsual_active))
+ {
+ line_attr = HL_ATTR(HLF_CUL);
+ area_highlighting = TRUE;
+ }
wp->w_last_cursorline = wp->w_cursor.lnum;
}
#endif
diff --git a/src/testdir/dumps/Test_cursorline_with_visualmode_01.dump b/src/testdir/dumps/Test_cursorline_with_visualmode_01.dump
new file mode 100644
index 0000000000..b6e20b7ce6
--- /dev/null
+++ b/src/testdir/dumps/Test_cursorline_with_visualmode_01.dump
@@ -0,0 +1,12 @@
+|a+0&#e0e0e08|b|c| | +0&#ffffff0@70
+|a+0&#e0e0e08|b|c| | +0&#ffffff0@70
+|a+0&#e0e0e08|b|c| | +0&#ffffff0@70
+|a+0&#e0e0e08|b|c| | +0&#ffffff0@70
+|a+0&#e0e0e08|b|c| | +0&#ffffff0@70
+>a|b+0&#e0e0e08|c| | +0&#ffffff0@70
+|a|b|c| @71
+|a|b|c| @71
+|a|b|c| @71
+|a|b|c| @71
+|a|b|c| @71
+|-+2&&@1| |V|I|S|U|A|L| |L|I|N|E| |-@1| +0&&@29|1|2| @7|1|2|,|1| @9|1|5|%|
diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim
index b37684c6f5..e16abf1837 100644
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -552,3 +552,23 @@ func Test_cursorline_after_yank()
call StopVimInTerminal(buf)
call delete('Xtest_cursorline_yank')
endfunc
+
+func Test_cursorline_with_visualmode()
+ if !CanRunVimInTerminal()
+ return
+ endif
+
+ call writefile([
+ \ 'set cul',
+ \ 'call setline(1, repeat(["abc"], 50))',
+ \ ], 'Xtest_cursorline_with_visualmode')
+ let buf = RunVimInTerminal('-S Xtest_cursorline_with_visualmode', {'rows': 12})
+ call term_wait(buf)
+ call term_sendkeys(buf, "V\<C-f>kkkjk")
+
+ call VerifyScreenDump(buf, 'Test_cursorline_with_visualmode_01', {})
+
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete('Xtest_cursorline_with_visualmode')
+endfunc
diff --git a/src/version.c b/src/version.c
index e4e6b3ce8f..248b8414b7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -780,6 +780,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1001,
+/**/
1000,
/**/
999,