changeset 31932:19648eb383d9 v9.0.1298

patch 9.0.1298: inserting register on the cmdline does not trigger incsearch Commit: https://github.com/vim/vim/commit/c4b7dec38292fe1cfad7aa5f244031fc6f7c7a09 Author: K.Takata <kentkt@csc.jp> Date: Fri Feb 10 21:38:44 2023 +0000 patch 9.0.1298: inserting register on the cmdline does not trigger incsearch Problem: Inserting a register on the command line does not trigger incsearch or update hlsearch. Solution: Have cmdline_insert_reg() return CMDLINE_CHANGED when appropriate and handle it correctly. (Ken Takata, closes #11960)
author Bram Moolenaar <Bram@vim.org>
date Fri, 10 Feb 2023 22:45:03 +0100
parents 96ac3ba1fc35
children 82d3cd3c6b40
files src/ex_getln.c src/testdir/dumps/Test_hlsearch_ctrlr_1.dump src/testdir/test_hlsearch.vim src/version.c
diffstat 4 files changed, 39 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1183,6 +1183,7 @@ cmdline_insert_reg(int *gotesc UNUSED)
 {
     int		i;
     int		c;
+    int		literally = FALSE;
 #ifdef FEAT_EVAL
     int		save_new_cmdpos = new_cmdpos;
 #endif
@@ -1220,7 +1221,8 @@ cmdline_insert_reg(int *gotesc UNUSED)
 #endif
     if (c != ESC)	    // use ESC to cancel inserting register
     {
-	cmdline_paste(c, i == Ctrl_R, FALSE);
+	literally = i == Ctrl_R;
+	cmdline_paste(c, literally, FALSE);
 
 #ifdef FEAT_EVAL
 	// When there was a serious error abort getting the
@@ -1251,8 +1253,9 @@ cmdline_insert_reg(int *gotesc UNUSED)
     // remove the double quote
     redrawcmd();
 
-    // The text has been stuffed, the command line didn't change yet.
-    return CMDLINE_NOT_CHANGED;
+    // The text has been stuffed, the command line didn't change yet, but it
+    // will change soon.  The caller must take care of it.
+    return literally ? CMDLINE_NOT_CHANGED : CMDLINE_CHANGED;
 }
 
 /*
@@ -2081,11 +2084,13 @@ getcmdline_int(
 
 	case Ctrl_R:			// insert register
 		res = cmdline_insert_reg(&gotesc);
+		if (res == GOTO_NORMAL_MODE)
+		    goto returncmd;
+#ifdef FEAT_SEARCH_EXTRA
 		if (res == CMDLINE_NOT_CHANGED)
-		    goto cmdline_not_changed;
-		else if (res == GOTO_NORMAL_MODE)
-		    goto returncmd;
-		goto cmdline_changed;
+		    is_state.incsearch_postponed = TRUE;
+#endif
+		goto cmdline_not_changed;
 
 	case Ctrl_D:
 		if (showmatches(&xpc, FALSE) == EXPAND_NOTHING)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_hlsearch_ctrlr_1.dump
@@ -0,0 +1,6 @@
+| +0&#ffffff0@59
+|t+1&&|e|x|t| +0&&@55
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|/+0#0000000&|t|e|x|t> @54
--- a/src/testdir/test_hlsearch.vim
+++ b/src/testdir/test_hlsearch.vim
@@ -1,6 +1,7 @@
 " Test for v:hlsearch
 
 source check.vim
+source screendump.vim
 
 func Test_hlsearch()
   new
@@ -72,4 +73,22 @@ func Test_hlsearch_eol_highlight()
   bwipe!
 endfunc
 
+func Test_hlsearch_Ctrl_R()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+      set incsearch hlsearch
+      let @" = "text"
+      put
+  END
+  call writefile(lines, 'XhlsearchCtrlR', 'D')
+  let buf = RunVimInTerminal('-S XhlsearchCtrlR', #{rows: 6, cols: 60})
+
+  call term_sendkeys(buf, "/\<C-R>\<C-R>\"")
+  call VerifyScreenDump(buf, 'Test_hlsearch_ctrlr_1', {})
+
+  call term_sendkeys(buf, "\<Esc>")
+  call StopVimInTerminal(buf)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1298,
+/**/
     1297,
 /**/
     1296,