summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-03-26 13:28:14 +0000
committerBram Moolenaar <Bram@vim.org>2022-03-26 13:28:14 +0000
commitbf269ed0b0bd8414eea7bea17465b2738a9a2b55 (patch)
treeb39190c9bf3153f382e4fdbeff9acec9b9d308f6
parentc6c1ec4da53db9d292fa3dd081c20123f8261178 (diff)
patch 8.2.4630: 'cursorline' not always updated with 'culopt' is "screenline"v8.2.4630
Problem: 'cursorline' not always updated with 'cursorlineopt' is "screenline". Solution: Call check_redraw_cursorline() more often. (closes #10013)
-rw-r--r--src/edit.c4
-rw-r--r--src/normal.c4
-rw-r--r--src/testdir/dumps/Test_cursorline_screenline_1.dump8
-rw-r--r--src/testdir/dumps/Test_cursorline_screenline_2.dump8
-rw-r--r--src/testdir/test_cursorline.vim21
-rw-r--r--src/version.c2
6 files changed, 47 insertions, 0 deletions
diff --git a/src/edit.c b/src/edit.c
index 0edd38be4c..a183324b35 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1058,6 +1058,10 @@ doESCkey:
case K_COMMAND: // <Cmd>command<CR>
case K_SCRIPT_COMMAND: // <ScriptCmd>command<CR>
do_cmdkey_command(c, 0);
+#ifdef FEAT_SYN_HL
+ // Might need to update for 'cursorline'.
+ check_redraw_cursorline();
+#endif
#ifdef FEAT_TERMINAL
if (term_use_loop())
// Started a terminal that gets the input, exit Insert mode.
diff --git a/src/normal.c b/src/normal.c
index e39fb772ae..49e5a93b1d 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -6971,6 +6971,10 @@ nv_edit(cmdarg_T *cap)
coladvance(getviscol());
State = save_State;
}
+#ifdef FEAT_SYN_HL
+ // Might need to update for 'cursorline'.
+ check_redraw_cursorline();
+#endif
invoke_edit(cap, FALSE, cap->cmdchar, FALSE);
}
diff --git a/src/testdir/dumps/Test_cursorline_screenline_1.dump b/src/testdir/dumps/Test_cursorline_screenline_1.dump
new file mode 100644
index 0000000000..d28794bb77
--- /dev/null
+++ b/src/testdir/dumps/Test_cursorline_screenline_1.dump
@@ -0,0 +1,8 @@
+|x+0&#ffffff0|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z
+| +8&&|x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| > @29
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|1|2|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_cursorline_screenline_2.dump b/src/testdir/dumps/Test_cursorline_screenline_2.dump
new file mode 100644
index 0000000000..3c44da1fff
--- /dev/null
+++ b/src/testdir/dumps/Test_cursorline_screenline_2.dump
@@ -0,0 +1,8 @@
+>x+8&#ffffff0|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z
+| +0&&|x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| |x|y|z| @30
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|1| @10|A|l@1|
diff --git a/src/testdir/test_cursorline.vim b/src/testdir/test_cursorline.vim
index c2505e3d58..7797cd6280 100644
--- a/src/testdir/test_cursorline.vim
+++ b/src/testdir/test_cursorline.vim
@@ -272,5 +272,26 @@ func Test_cursorline_callback()
call delete('Xcul_timer')
endfunc
+func Test_cursorline_screenline_update()
+ CheckScreendump
+
+ let lines =<< trim END
+ call setline(1, repeat('xyz ', 30))
+ set cursorline cursorlineopt=screenline
+ inoremap <F2> <Cmd>call cursor(1, 1)<CR>
+ END
+ call writefile(lines, 'Xcul_screenline')
+
+ let buf = RunVimInTerminal('-S Xcul_screenline', #{rows: 8})
+ call term_sendkeys(buf, "A")
+ call VerifyScreenDump(buf, 'Test_cursorline_screenline_1', {})
+ call term_sendkeys(buf, "\<F2>")
+ call VerifyScreenDump(buf, 'Test_cursorline_screenline_2', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call StopVimInTerminal(buf)
+ call delete('Xcul_screenline')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index a68c88137b..5eb4eea1e5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4630,
+/**/
4629,
/**/
4628,