mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
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)
c4b7dec382
Co-authored-by: K.Takata <kentkt@csc.jp>
This commit is contained in:
parent
7d58de11f4
commit
9437800d28
@ -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
|
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
|
// When there was a serious error abort getting the
|
||||||
// command line.
|
// command line.
|
||||||
@ -1624,8 +1626,9 @@ static int command_line_insert_reg(CommandLineState *s)
|
|||||||
ccline.special_char = NUL;
|
ccline.special_char = NUL;
|
||||||
redrawcmd();
|
redrawcmd();
|
||||||
|
|
||||||
// The text has been stuffed, the command line didn't change yet.
|
// The text has been stuffed, the command line didn't change yet, but it
|
||||||
return CMDLINE_NOT_CHANGED;
|
// 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.
|
/// 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
|
case Ctrl_R: // insert register
|
||||||
switch (command_line_insert_reg(s)) {
|
switch (command_line_insert_reg(s)) {
|
||||||
case CMDLINE_NOT_CHANGED:
|
|
||||||
return command_line_not_changed(s);
|
|
||||||
case GOTO_NORMAL_MODE:
|
case GOTO_NORMAL_MODE:
|
||||||
return 0; // back to cmd mode
|
return 0; // back to cmd mode
|
||||||
|
case CMDLINE_NOT_CHANGED:
|
||||||
|
s->is_state.incsearch_postponed = true;
|
||||||
|
FALLTHROUGH;
|
||||||
default:
|
default:
|
||||||
return command_line_changed(s);
|
return command_line_not_changed(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
case Ctrl_D:
|
case Ctrl_D:
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
" Test for v:hlsearch
|
" Test for v:hlsearch
|
||||||
|
|
||||||
|
source check.vim
|
||||||
|
source screendump.vim
|
||||||
|
|
||||||
func Test_hlsearch()
|
func Test_hlsearch()
|
||||||
new
|
new
|
||||||
call setline(1, repeat(['aaa'], 10))
|
call setline(1, repeat(['aaa'], 10))
|
||||||
@ -63,3 +66,23 @@ func Test_hlsearch_eol_highlight()
|
|||||||
set nohlsearch
|
set nohlsearch
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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
|
||||||
|
@ -10,7 +10,6 @@ local testprg = helpers.testprg
|
|||||||
|
|
||||||
describe('search highlighting', function()
|
describe('search highlighting', function()
|
||||||
local screen
|
local screen
|
||||||
local colors = Screen.colors
|
|
||||||
|
|
||||||
before_each(function()
|
before_each(function()
|
||||||
clear()
|
clear()
|
||||||
@ -18,9 +17,9 @@ describe('search highlighting', function()
|
|||||||
screen:attach()
|
screen:attach()
|
||||||
screen:set_default_attr_ids( {
|
screen:set_default_attr_ids( {
|
||||||
[1] = {bold=true, foreground=Screen.colors.Blue},
|
[1] = {bold=true, foreground=Screen.colors.Blue},
|
||||||
[2] = {background = colors.Yellow}, -- Search
|
[2] = {background = Screen.colors.Yellow}, -- Search
|
||||||
[3] = {reverse = true},
|
[3] = {reverse = true},
|
||||||
[4] = {foreground = colors.Red}, -- Message
|
[4] = {foreground = Screen.colors.Red}, -- Message
|
||||||
[6] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGrey}, -- Folded
|
[6] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGrey}, -- Folded
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
@ -498,6 +497,20 @@ describe('search highlighting', function()
|
|||||||
{1:~ }│{1:~ }|
|
{1:~ }│{1:~ }|
|
||||||
//^ |
|
//^ |
|
||||||
]])
|
]])
|
||||||
|
feed('<Esc>')
|
||||||
|
|
||||||
|
-- incsearch works after c_CTRL-R_CTRL-R
|
||||||
|
command('let @" = "file"')
|
||||||
|
feed('/<C-R><C-R>"')
|
||||||
|
screen:expect([[
|
||||||
|
the first line │the first line |
|
||||||
|
in a little {3:file} │in a little {2:file} |
|
||||||
|
{1:~ }│{1:~ }|
|
||||||
|
{1:~ }│{1:~ }|
|
||||||
|
{1:~ }│{1:~ }|
|
||||||
|
{1:~ }│{1:~ }|
|
||||||
|
/file^ |
|
||||||
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('works with incsearch and offset', function()
|
it('works with incsearch and offset', function()
|
||||||
@ -572,12 +585,12 @@ describe('search highlighting', function()
|
|||||||
it('works with matchadd and syntax', function()
|
it('works with matchadd and syntax', function()
|
||||||
screen:set_default_attr_ids {
|
screen:set_default_attr_ids {
|
||||||
[1] = {bold=true, foreground=Screen.colors.Blue};
|
[1] = {bold=true, foreground=Screen.colors.Blue};
|
||||||
[2] = {background = colors.Yellow};
|
[2] = {background = Screen.colors.Yellow};
|
||||||
[3] = {reverse = true};
|
[3] = {reverse = true};
|
||||||
[4] = {foreground = colors.Red};
|
[4] = {foreground = Screen.colors.Red};
|
||||||
[5] = {bold = true, background = colors.Green};
|
[5] = {bold = true, background = Screen.colors.Green};
|
||||||
[6] = {italic = true, background = colors.Magenta};
|
[6] = {italic = true, background = Screen.colors.Magenta};
|
||||||
[7] = {bold = true, background = colors.Yellow};
|
[7] = {bold = true, background = Screen.colors.Yellow};
|
||||||
[8] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGray};
|
[8] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGray};
|
||||||
}
|
}
|
||||||
feed_command('set hlsearch')
|
feed_command('set hlsearch')
|
||||||
|
Loading…
Reference in New Issue
Block a user