# HG changeset patch # User Bram Moolenaar # Date 1676065503 -3600 # Node ID 19648eb383d9dab203cc1be47b6a17f5edd73fa3 # Parent 96ac3ba1fc3509bbecd491cc5b722ff28311c1d2 patch 9.0.1298: inserting register on the cmdline does not trigger incsearch Commit: https://github.com/vim/vim/commit/c4b7dec38292fe1cfad7aa5f244031fc6f7c7a09 Author: K.Takata 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) diff --git a/src/ex_getln.c b/src/ex_getln.c --- 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) diff --git a/src/testdir/dumps/Test_hlsearch_ctrlr_1.dump b/src/testdir/dumps/Test_hlsearch_ctrlr_1.dump 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 diff --git a/src/testdir/test_hlsearch.vim b/src/testdir/test_hlsearch.vim --- 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, "/\\\"") + call VerifyScreenDump(buf, 'Test_hlsearch_ctrlr_1', {}) + + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- 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,