mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.1580: wildmenu does not work properly
Problem: Wildmenu does not work properly. Solution: Do not call may_do_incsearch_highlighting() if completion is in progress.
This commit is contained in:
@@ -397,7 +397,8 @@ may_do_incsearch_highlighting(
|
|||||||
// NOTE: must call restore_last_search_pattern() before returning!
|
// NOTE: must call restore_last_search_pattern() before returning!
|
||||||
save_last_search_pattern();
|
save_last_search_pattern();
|
||||||
|
|
||||||
if (!do_incsearch_highlighting(firstc, &search_delim, is_state, &skiplen, &patlen))
|
if (!do_incsearch_highlighting(firstc, &search_delim, is_state,
|
||||||
|
&skiplen, &patlen))
|
||||||
{
|
{
|
||||||
restore_last_search_pattern();
|
restore_last_search_pattern();
|
||||||
finish_incsearch_highlighting(FALSE, is_state, TRUE);
|
finish_incsearch_highlighting(FALSE, is_state, TRUE);
|
||||||
@@ -1235,10 +1236,10 @@ getcmdline_int(
|
|||||||
if (has_mbyte)
|
if (has_mbyte)
|
||||||
j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
|
j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
|
||||||
if (vim_ispathsep(ccline.cmdbuff[j])
|
if (vim_ispathsep(ccline.cmdbuff[j])
|
||||||
#ifdef BACKSLASH_IN_FILENAME
|
# ifdef BACKSLASH_IN_FILENAME
|
||||||
&& vim_strchr((char_u *)" *?[{`$%#",
|
&& vim_strchr((char_u *)" *?[{`$%#",
|
||||||
ccline.cmdbuff[j + 1]) == NULL
|
ccline.cmdbuff[j + 1]) == NULL
|
||||||
#endif
|
# endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (found)
|
if (found)
|
||||||
@@ -1425,6 +1426,7 @@ getcmdline_int(
|
|||||||
if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
|
if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
|
||||||
{
|
{
|
||||||
int options = WILD_NO_BEEP;
|
int options = WILD_NO_BEEP;
|
||||||
|
|
||||||
if (wim_flags[wim_index] & WIM_BUFLASTUSED)
|
if (wim_flags[wim_index] & WIM_BUFLASTUSED)
|
||||||
options |= WILD_BUFLASTUSED;
|
options |= WILD_BUFLASTUSED;
|
||||||
if (xpc.xp_numfiles > 0) // typed p_wc at least twice
|
if (xpc.xp_numfiles > 0) // typed p_wc at least twice
|
||||||
@@ -1442,8 +1444,7 @@ getcmdline_int(
|
|||||||
res = nextwild(&xpc, WILD_LONGEST, options,
|
res = nextwild(&xpc, WILD_LONGEST, options,
|
||||||
firstc != '@');
|
firstc != '@');
|
||||||
else if (wim_flags[wim_index] & WIM_FULL)
|
else if (wim_flags[wim_index] & WIM_FULL)
|
||||||
res = nextwild(&xpc, WILD_NEXT, options,
|
res = nextwild(&xpc, WILD_NEXT, options, firstc != '@');
|
||||||
firstc != '@');
|
|
||||||
else
|
else
|
||||||
res = OK; // don't insert 'wildchar' now
|
res = OK; // don't insert 'wildchar' now
|
||||||
}
|
}
|
||||||
@@ -1454,8 +1455,7 @@ getcmdline_int(
|
|||||||
// if 'wildmode' first contains "longest", get longest
|
// if 'wildmode' first contains "longest", get longest
|
||||||
// common part
|
// common part
|
||||||
if (wim_flags[0] & WIM_LONGEST)
|
if (wim_flags[0] & WIM_LONGEST)
|
||||||
res = nextwild(&xpc, WILD_LONGEST, options,
|
res = nextwild(&xpc, WILD_LONGEST, options, firstc != '@');
|
||||||
firstc != '@');
|
|
||||||
else
|
else
|
||||||
res = nextwild(&xpc, WILD_EXPAND_KEEP, options,
|
res = nextwild(&xpc, WILD_EXPAND_KEEP, options,
|
||||||
firstc != '@');
|
firstc != '@');
|
||||||
@@ -1511,8 +1511,7 @@ getcmdline_int(
|
|||||||
nextwild(&xpc, WILD_LONGEST, options,
|
nextwild(&xpc, WILD_LONGEST, options,
|
||||||
firstc != '@');
|
firstc != '@');
|
||||||
else if (wim_flags[wim_index] & WIM_FULL)
|
else if (wim_flags[wim_index] & WIM_FULL)
|
||||||
nextwild(&xpc, WILD_NEXT, options,
|
nextwild(&xpc, WILD_NEXT, options, firstc != '@');
|
||||||
firstc != '@');
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
vim_beep(BO_WILD);
|
vim_beep(BO_WILD);
|
||||||
@@ -2348,6 +2347,7 @@ cmdline_changed:
|
|||||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
|
||||||
|
|
||||||
#ifdef FEAT_SEARCH_EXTRA
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
|
if (xpc.xp_context == EXPAND_NOTHING)
|
||||||
may_do_incsearch_highlighting(firstc, count, &is_state);
|
may_do_incsearch_highlighting(firstc, count, &is_state);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
8
src/testdir/dumps/Test_wildmenu_1.dump
Normal file
8
src/testdir/dumps/Test_wildmenu_1.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|v+0#0000001#ffff4012|i|m|9|s|c|r|i|p|t| +3#0000000#ffffff0@1|v|i|m|g|r|e|p| @1|v|i|m|g|r|e|p|a|d@1| @43
|
||||||
|
|:+0&&|v|i|m|9|s|c|r|i|p|t> @63
|
8
src/testdir/dumps/Test_wildmenu_2.dump
Normal file
8
src/testdir/dumps/Test_wildmenu_2.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|v+3#0000000&|i|m|9|s|c|r|i|p|t| @1|v+0#0000001#ffff4012|i|m|g|r|e|p| +3#0000000#ffffff0@1|v|i|m|g|r|e|p|a|d@1| @43
|
||||||
|
|:+0&&|v|i|m|g|r|e|p> @66
|
8
src/testdir/dumps/Test_wildmenu_3.dump
Normal file
8
src/testdir/dumps/Test_wildmenu_3.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|v+3#0000000&|i|m|9|s|c|r|i|p|t| @1|v|i|m|g|r|e|p| @1|v+0#0000001#ffff4012|i|m|g|r|e|p|a|d@1| +3#0000000#ffffff0@43
|
||||||
|
|:+0&&|v|i|m|g|r|e|p|a|d@1> @63
|
8
src/testdir/dumps/Test_wildmenu_4.dump
Normal file
8
src/testdir/dumps/Test_wildmenu_4.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|v+3#0000000&|i|m|9|s|c|r|i|p|t| @1|v|i|m|g|r|e|p| @1|v|i|m|g|r|e|p|a|d@1| @43
|
||||||
|
|:+0&&|v|i|m> @70
|
@@ -84,6 +84,34 @@ func Test_complete_wildmenu()
|
|||||||
call delete('Xdir1', 'd')
|
call delete('Xdir1', 'd')
|
||||||
set nowildmenu
|
set nowildmenu
|
||||||
endfunc
|
endfunc
|
||||||
|
f
|
||||||
|
func Test_wildmenu_screendump()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim [SCRIPT]
|
||||||
|
set wildmenu hlsearch
|
||||||
|
[SCRIPT]
|
||||||
|
call writefile(lines, 'XTest_wildmenu')
|
||||||
|
|
||||||
|
let buf = RunVimInTerminal('-S XTest_wildmenu', {'rows': 8})
|
||||||
|
call term_sendkeys(buf, ":vim\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_1', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_2', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_3', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_4', {})
|
||||||
|
call term_sendkeys(buf, "\<Esc>")
|
||||||
|
|
||||||
|
" clean up
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XTest_wildmenu')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
func Test_map_completion()
|
func Test_map_completion()
|
||||||
CheckFeature cmdline_compl
|
CheckFeature cmdline_compl
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1580,
|
||||||
/**/
|
/**/
|
||||||
1579,
|
1579,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user