mirror of
https://github.com/vim/vim.git
synced 2025-10-23 08:44:20 -04:00
patch 9.1.1738: cmdline-autocompletion breaks history navigation
Problem: cmdline-autocompletion breaks history navigation (ddad431) Solution: Support history navigation in cmdline autocompletion (Girish Palya) Up/Down arrows support history navigation when using wildtrigger() fixes: #18207 closes: #18219 Signed-off-by: Girish Palya <girishji@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
8fec92d631
commit
708ab7f5fb
@@ -1,4 +1,4 @@
|
|||||||
*builtin.txt* For Vim version 9.1. Last change: 2025 Sep 02
|
*builtin.txt* For Vim version 9.1. Last change: 2025 Sep 06
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -12416,18 +12416,19 @@ wildtrigger() *wildtrigger()*
|
|||||||
produce a beep when no matches are found and generally
|
produce a beep when no matches are found and generally
|
||||||
operates more quietly. This makes it suitable for triggering
|
operates more quietly. This makes it suitable for triggering
|
||||||
completion automatically, such as from an |:autocmd|.
|
completion automatically, such as from an |:autocmd|.
|
||||||
|
|
||||||
*cmdline-autocompletion*
|
*cmdline-autocompletion*
|
||||||
Example: To make the completion menu pop up automatically as
|
Example: To make the completion menu pop up automatically
|
||||||
you type on the command line, use: >
|
while typing on the command line: >
|
||||||
autocmd CmdlineChanged [:/\?] call wildtrigger()
|
autocmd CmdlineChanged [:/\?] call wildtrigger()
|
||||||
set wildmode=noselect:lastused,full wildoptions=pum
|
set wildmode=noselect:lastused,full wildoptions=pum
|
||||||
<
|
<
|
||||||
To retain normal history navigation (up/down keys): >
|
To retain normal history navigation with the up/down keys: >
|
||||||
cnoremap <Up> <C-U><Up>
|
cnoremap <expr> <Up> wildmenumode() ? "\<C-E>\<Up>" : "\<Up>"
|
||||||
cnoremap <Down> <C-U><Down>
|
cnoremap <expr> <Down> wildmenumode() ? "\<C-E>\<Down>" : "\<Down>"
|
||||||
<
|
<
|
||||||
To set an option specifically when performing a search, e.g.
|
To apply an option only during a search, for example to set
|
||||||
to set 'pumheight': >
|
'pumheight': >
|
||||||
autocmd CmdlineEnter [/\?] set pumheight=8
|
autocmd CmdlineEnter [/\?] set pumheight=8
|
||||||
autocmd CmdlineLeave [/\?] set pumheight&
|
autocmd CmdlineLeave [/\?] set pumheight&
|
||||||
<
|
<
|
||||||
|
@@ -1681,6 +1681,7 @@ getcmdline_int(
|
|||||||
int wild_type = 0;
|
int wild_type = 0;
|
||||||
int event_cmdlineleavepre_triggered = FALSE;
|
int event_cmdlineleavepre_triggered = FALSE;
|
||||||
char_u *prev_cmdbuff = NULL;
|
char_u *prev_cmdbuff = NULL;
|
||||||
|
int did_hist_navigate = FALSE;
|
||||||
|
|
||||||
// one recursion level deeper
|
// one recursion level deeper
|
||||||
++depth;
|
++depth;
|
||||||
@@ -1891,6 +1892,13 @@ getcmdline_int(
|
|||||||
c = safe_vgetc();
|
c = safe_vgetc();
|
||||||
} while (c == K_IGNORE || c == K_NOP);
|
} while (c == K_IGNORE || c == K_NOP);
|
||||||
|
|
||||||
|
// Skip wildmenu during history navigation via Up/Down keys
|
||||||
|
if (c == K_WILD && did_hist_navigate)
|
||||||
|
{
|
||||||
|
did_hist_navigate = FALSE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (c == K_COMMAND || c == K_SCRIPT_COMMAND)
|
if (c == K_COMMAND || c == K_SCRIPT_COMMAND)
|
||||||
{
|
{
|
||||||
int clen = ccline.cmdlen;
|
int clen = ccline.cmdlen;
|
||||||
@@ -2489,7 +2497,10 @@ getcmdline_int(
|
|||||||
res = cmdline_browse_history(c, firstc, &lookfor, &lookforlen, histype,
|
res = cmdline_browse_history(c, firstc, &lookfor, &lookforlen, histype,
|
||||||
&hiscnt, &xpc);
|
&hiscnt, &xpc);
|
||||||
if (res == CMDLINE_CHANGED)
|
if (res == CMDLINE_CHANGED)
|
||||||
|
{
|
||||||
|
did_hist_navigate = TRUE;
|
||||||
goto cmdline_changed;
|
goto cmdline_changed;
|
||||||
|
}
|
||||||
else if (res == GOTO_NORMAL_MODE)
|
else if (res == GOTO_NORMAL_MODE)
|
||||||
goto returncmd;
|
goto returncmd;
|
||||||
}
|
}
|
||||||
|
@@ -5039,4 +5039,28 @@ func Test_CmdlineLeave_vchar_keys()
|
|||||||
unlet g:leave_key
|
unlet g:leave_key
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Skip wildmenu during history navigation via Up/Down keys
|
||||||
|
func Test_skip_wildtrigger_hist_navigation()
|
||||||
|
call test_override("char_avail", 1)
|
||||||
|
cnoremap <F8> <C-R>=wildtrigger()[-1]<CR>
|
||||||
|
set wildmenu
|
||||||
|
|
||||||
|
call feedkeys(":ech\<F8>\<F4>\<C-B>\"\<CR>", "tx")
|
||||||
|
call assert_match('echo*', g:Sline)
|
||||||
|
call assert_equal('"echo', @:)
|
||||||
|
|
||||||
|
call feedkeys(":echom \"foo\"", "tx")
|
||||||
|
call feedkeys(":echom \"foobar\"", "tx")
|
||||||
|
call feedkeys(":ech\<F8>\<C-E>\<UP>\<C-B>\"\<CR>", "tx")
|
||||||
|
call assert_equal('"echom "foobar"', @:)
|
||||||
|
call feedkeys(":ech\<F8>\<C-E>\<UP>\<UP>\<UP>\<C-B>\"\<CR>", "tx")
|
||||||
|
call assert_equal('"echom "foo"', @:)
|
||||||
|
call feedkeys(":ech\<F8>\<C-E>\<UP>\<UP>\<UP>\<Down>\<C-B>\"\<CR>", "tx")
|
||||||
|
call assert_equal('"echom "foobar"', @:)
|
||||||
|
|
||||||
|
call test_override("char_avail", 0)
|
||||||
|
set wildmenu&
|
||||||
|
cunmap <F8>
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -724,6 +724,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 */
|
||||||
|
/**/
|
||||||
|
1738,
|
||||||
/**/
|
/**/
|
||||||
1737,
|
1737,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user