vim-patch:8.0.1210: CTRL-G and CTRL-T are ignored with typeahead

Problem:    When typing a search pattern CTRL-G and CTRL-T are ignored when
            there is typeahead.
Solution:   Don't pass SEARCH_PEEK and don't call char_avail(). (haya14busa,
            closes vim/vim#2233)

f8e8c0643b
This commit is contained in:
Justin M. Keyes 2018-02-02 23:26:16 +01:00
parent 2de447b60c
commit cebf31cf70
2 changed files with 34 additions and 11 deletions

View File

@ -443,14 +443,8 @@ static uint8_t *command_line_enter(int firstc, long count, int indent)
}
}
if (s->gotesc) { // abandon command line
xfree(ccline.cmdbuff);
ccline.cmdbuff = NULL;
if (msg_scrolled == 0) {
compute_cmdrow();
}
MSG("");
redraw_cmdline = true;
if (s->gotesc) {
abandon_cmdline();
}
}
@ -1680,9 +1674,6 @@ static int command_line_handle_key(CommandLineState *s)
case Ctrl_G: // next match
case Ctrl_T: // previous match
if (p_is && !cmd_silent && (s->firstc == '/' || s->firstc == '?')) {
if (char_avail()) {
return 1;
}
if (ccline.cmdlen != 0) {
command_line_next_incsearch(s, s->c == Ctrl_G);
}
@ -1948,6 +1939,18 @@ static int command_line_changed(CommandLineState *s)
return 1;
}
/// Abandon the command line.
static void abandon_cmdline(void)
{
xfree(ccline.cmdbuff);
ccline.cmdbuff = NULL;
if (msg_scrolled == 0) {
compute_cmdrow();
}
MSG("");
redraw_cmdline = true;
}
/*
* getcmdline() - accept a command line starting with firstc.
*

View File

@ -364,6 +364,26 @@ func Test_search_cmdline4()
bw!
endfunc
func Test_search_cmdline5()
if !exists('+incsearch')
return
endif
" Do not call test_override("char_avail", 1) so that <C-g> and <C-t> work
" regardless char_avail.
new
call setline(1, [' 1 the first', ' 2 the second', ' 3 the third'])
set incsearch
1
call feedkeys("/the\<c-g>\<c-g>\<cr>", 'tx')
call assert_equal(' 3 the third', getline('.'))
$
call feedkeys("?the\<c-t>\<c-t>\<c-t>\<cr>", 'tx')
call assert_equal(' 2 the second', getline('.'))
" clean up
set noincsearch
bw!
endfunc
" Tests for regexp with various magic settings
func Test_search_regexp()
enew!