summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-03 16:50:13 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-03 16:50:13 +0200
commita60053b8f4cc7e135ba9496a8f4855d26aee09e7 (patch)
tree250256fa3791a79b902c72ab6bff804a2710c63f
parent5b5aa11801c75fac18a587bea02dc7a8b5b90c4b (diff)
downloadvim-git-a60053b8f4cc7e135ba9496a8f4855d26aee09e7.tar.gz
patch 8.2.1580: wildmenu does not work properlyv8.2.1580
Problem: Wildmenu does not work properly. Solution: Do not call may_do_incsearch_highlighting() if completion is in progress.
-rw-r--r--src/ex_getln.c24
-rw-r--r--src/testdir/dumps/Test_wildmenu_1.dump8
-rw-r--r--src/testdir/dumps/Test_wildmenu_2.dump8
-rw-r--r--src/testdir/dumps/Test_wildmenu_3.dump8
-rw-r--r--src/testdir/dumps/Test_wildmenu_4.dump8
-rw-r--r--src/testdir/test_cmdline.vim28
-rw-r--r--src/version.c2
7 files changed, 74 insertions, 12 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 60a8a0c71..bc193a209 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -397,7 +397,8 @@ may_do_incsearch_highlighting(
// NOTE: must call restore_last_search_pattern() before returning!
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();
finish_incsearch_highlighting(FALSE, is_state, TRUE);
@@ -1235,10 +1236,10 @@ getcmdline_int(
if (has_mbyte)
j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
if (vim_ispathsep(ccline.cmdbuff[j])
-#ifdef BACKSLASH_IN_FILENAME
+# ifdef BACKSLASH_IN_FILENAME
&& vim_strchr((char_u *)" *?[{`$%#",
ccline.cmdbuff[j + 1]) == NULL
-#endif
+# endif
)
{
if (found)
@@ -1425,6 +1426,7 @@ getcmdline_int(
if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
{
int options = WILD_NO_BEEP;
+
if (wim_flags[wim_index] & WIM_BUFLASTUSED)
options |= WILD_BUFLASTUSED;
if (xpc.xp_numfiles > 0) // typed p_wc at least twice
@@ -1442,8 +1444,7 @@ getcmdline_int(
res = nextwild(&xpc, WILD_LONGEST, options,
firstc != '@');
else if (wim_flags[wim_index] & WIM_FULL)
- res = nextwild(&xpc, WILD_NEXT, options,
- firstc != '@');
+ res = nextwild(&xpc, WILD_NEXT, options, firstc != '@');
else
res = OK; // don't insert 'wildchar' now
}
@@ -1454,11 +1455,10 @@ getcmdline_int(
// if 'wildmode' first contains "longest", get longest
// common part
if (wim_flags[0] & WIM_LONGEST)
- res = nextwild(&xpc, WILD_LONGEST, options,
- firstc != '@');
+ res = nextwild(&xpc, WILD_LONGEST, options, firstc != '@');
else
res = nextwild(&xpc, WILD_EXPAND_KEEP, options,
- firstc != '@');
+ firstc != '@');
// if interrupted while completing, behave like it failed
if (got_int)
@@ -1483,7 +1483,7 @@ getcmdline_int(
wim_index = 1;
if ((wim_flags[wim_index] & WIM_LIST)
#ifdef FEAT_WILDMENU
- || (p_wmnu && (wim_flags[wim_index] & WIM_FULL) != 0)
+ || (p_wmnu && (wim_flags[wim_index] & WIM_FULL) != 0)
#endif
)
{
@@ -1511,8 +1511,7 @@ getcmdline_int(
nextwild(&xpc, WILD_LONGEST, options,
firstc != '@');
else if (wim_flags[wim_index] & WIM_FULL)
- nextwild(&xpc, WILD_NEXT, options,
- firstc != '@');
+ nextwild(&xpc, WILD_NEXT, options, firstc != '@');
}
else
vim_beep(BO_WILD);
@@ -2348,7 +2347,8 @@ cmdline_changed:
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
#ifdef FEAT_SEARCH_EXTRA
- may_do_incsearch_highlighting(firstc, count, &is_state);
+ if (xpc.xp_context == EXPAND_NOTHING)
+ may_do_incsearch_highlighting(firstc, count, &is_state);
#endif
#ifdef FEAT_RIGHTLEFT
diff --git a/src/testdir/dumps/Test_wildmenu_1.dump b/src/testdir/dumps/Test_wildmenu_1.dump
new file mode 100644
index 000000000..a11896958
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_1.dump
@@ -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
diff --git a/src/testdir/dumps/Test_wildmenu_2.dump b/src/testdir/dumps/Test_wildmenu_2.dump
new file mode 100644
index 000000000..46b41ae07
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_2.dump
@@ -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
diff --git a/src/testdir/dumps/Test_wildmenu_3.dump b/src/testdir/dumps/Test_wildmenu_3.dump
new file mode 100644
index 000000000..44749367d
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_3.dump
@@ -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
diff --git a/src/testdir/dumps/Test_wildmenu_4.dump b/src/testdir/dumps/Test_wildmenu_4.dump
new file mode 100644
index 000000000..3703fd529
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_4.dump
@@ -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
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 266513ee9..6ebfa31c8 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -84,6 +84,34 @@ func Test_complete_wildmenu()
call delete('Xdir1', 'd')
set nowildmenu
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()
CheckFeature cmdline_compl
diff --git a/src/version.c b/src/version.c
index f9198c7e8..8d20b46be 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1580,
+/**/
1579,
/**/
1578,