aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-02-11 18:44:06 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-02-11 19:04:27 +0800
commit9437800d280385c018a99aa0fbe9043e4d7715aa (patch)
tree7df9e0e7074f22cd9642c064f782f86373ec3107 /src
parent7d58de11f49c574a8a305e28e96b9ff810493012 (diff)
downloadrneovim-9437800d280385c018a99aa0fbe9043e4d7715aa.tar.gz
rneovim-9437800d280385c018a99aa0fbe9043e4d7715aa.tar.bz2
rneovim-9437800d280385c018a99aa0fbe9043e4d7715aa.zip
vim-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 vim/vim#11960) https://github.com/vim/vim/commit/c4b7dec38292fe1cfad7aa5f244031fc6f7c7a09 Co-authored-by: K.Takata <kentkt@csc.jp>
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_getln.c16
-rw-r--r--src/nvim/testdir/test_hlsearch.vim23
2 files changed, 33 insertions, 6 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 6926a36366..d55da46227 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -1598,8 +1598,10 @@ static int command_line_insert_reg(CommandLineState *s)
}
}
+ bool literally = false;
if (s->c != ESC) { // use ESC to cancel inserting register
- cmdline_paste(s->c, i == Ctrl_R, false);
+ literally = i == Ctrl_R;
+ cmdline_paste(s->c, literally, false);
// When there was a serious error abort getting the
// command line.
@@ -1624,8 +1626,9 @@ static int command_line_insert_reg(CommandLineState *s)
ccline.special_char = NUL;
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;
}
/// Handle the Left and Right mouse clicks in the command-line mode.
@@ -1857,12 +1860,13 @@ static int command_line_handle_key(CommandLineState *s)
case Ctrl_R: // insert register
switch (command_line_insert_reg(s)) {
- case CMDLINE_NOT_CHANGED:
- return command_line_not_changed(s);
case GOTO_NORMAL_MODE:
return 0; // back to cmd mode
+ case CMDLINE_NOT_CHANGED:
+ s->is_state.incsearch_postponed = true;
+ FALLTHROUGH;
default:
- return command_line_changed(s);
+ return command_line_not_changed(s);
}
case Ctrl_D:
diff --git a/src/nvim/testdir/test_hlsearch.vim b/src/nvim/testdir/test_hlsearch.vim
index cf2791113a..043d378a39 100644
--- a/src/nvim/testdir/test_hlsearch.vim
+++ b/src/nvim/testdir/test_hlsearch.vim
@@ -1,5 +1,8 @@
" Test for v:hlsearch
+source check.vim
+source screendump.vim
+
func Test_hlsearch()
new
call setline(1, repeat(['aaa'], 10))
@@ -63,3 +66,23 @@ func Test_hlsearch_eol_highlight()
set nohlsearch
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