forked from aniani/vim
patch 8.0.0692: CTRL-G with 'incsearch' and ? goes in the wrong direction
Problem: Using CTRL-G with 'incsearch' and ? goes in the wrong direction. (Ramel Eshed) Solution: Adjust search_start. (Christian Brabandt)
This commit is contained in:
@@ -1708,6 +1708,14 @@ getcmdline(
|
|||||||
search_start = t;
|
search_start = t;
|
||||||
(void)decl(&search_start);
|
(void)decl(&search_start);
|
||||||
}
|
}
|
||||||
|
else if (c == Ctrl_G && firstc == '?')
|
||||||
|
{
|
||||||
|
/* move just after the current match, so that
|
||||||
|
* when nv_search finishes the cursor will be
|
||||||
|
* put back on the match */
|
||||||
|
search_start = t;
|
||||||
|
(void)incl(&search_start);
|
||||||
|
}
|
||||||
if (LT_POS(t, search_start) && c == Ctrl_G)
|
if (LT_POS(t, search_start) && c == Ctrl_G)
|
||||||
{
|
{
|
||||||
/* wrap around */
|
/* wrap around */
|
||||||
|
@@ -322,3 +322,37 @@ func Test_search_cmdline3()
|
|||||||
call test_override("char_avail", 0)
|
call test_override("char_avail", 0)
|
||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_search_cmdline4()
|
||||||
|
if !exists('+incsearch')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" need to disable char_avail,
|
||||||
|
" so that expansion of commandline works
|
||||||
|
call test_override("char_avail", 1)
|
||||||
|
new
|
||||||
|
call setline(1, [' 1 the first', ' 2 the second', ' 3 the third'])
|
||||||
|
set incsearch
|
||||||
|
$
|
||||||
|
call feedkeys("?the\<c-g>\<cr>", 'tx')
|
||||||
|
call assert_equal(' 3 the third', getline('.'))
|
||||||
|
$
|
||||||
|
call feedkeys("?the\<c-g>\<c-g>\<cr>", 'tx')
|
||||||
|
call assert_equal(' 1 the first', getline('.'))
|
||||||
|
$
|
||||||
|
call feedkeys("?the\<c-g>\<c-g>\<c-g>\<cr>", 'tx')
|
||||||
|
call assert_equal(' 2 the second', getline('.'))
|
||||||
|
$
|
||||||
|
call feedkeys("?the\<c-t>\<cr>", 'tx')
|
||||||
|
call assert_equal(' 1 the first', getline('.'))
|
||||||
|
$
|
||||||
|
call feedkeys("?the\<c-t>\<c-t>\<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
|
||||||
|
call test_override("char_avail", 0)
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
692,
|
||||||
/**/
|
/**/
|
||||||
691,
|
691,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user