From 3908ef5017a6b4425727013588f72cc7343199b9 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Tue, 8 Feb 2022 12:08:07 +0000 Subject: patch 8.2.4325: 'wildmenu' only shows few matches Problem: 'wildmenu' only shows few matches. Solution: Add the "pum" option: use a popup menu to show the matches. (Yegappan Lakshmanan et al., closes #9707) --- src/cmdexpand.c | 109 +++++++++++++++++- src/drawscreen.c | 4 + src/evalfunc.c | 2 +- src/ex_getln.c | 55 ++++++++- src/option.h | 5 + src/optionstr.c | 2 +- src/popupmenu.c | 10 +- src/proto/cmdexpand.pro | 5 + src/testdir/dumps/Test_wildmenu_pum_01.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_02.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_03.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_04.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_05.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_06.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_07.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_08.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_09.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_10.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_11.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_12.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_13.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_14.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_15.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_16.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_17.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_18.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_19.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_20.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_21.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_22.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_23.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_24.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_25.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_26.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_27.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_28.dump | 10 ++ src/testdir/dumps/Test_wildmenu_pum_29.dump | 10 ++ src/testdir/test_cmdline.vim | 173 ++++++++++++++++++++++++++++ src/version.c | 2 + src/vim.h | 2 + 40 files changed, 648 insertions(+), 11 deletions(-) create mode 100644 src/testdir/dumps/Test_wildmenu_pum_01.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_02.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_03.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_04.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_05.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_06.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_07.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_08.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_09.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_10.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_11.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_12.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_13.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_14.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_15.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_16.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_17.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_18.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_19.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_20.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_21.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_22.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_23.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_24.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_25.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_26.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_27.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_28.dump create mode 100644 src/testdir/dumps/Test_wildmenu_pum_29.dump (limited to 'src') diff --git a/src/cmdexpand.c b/src/cmdexpand.c index b75903df98..b37c4f9acb 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -25,6 +25,16 @@ static int expand_shellcmd(char_u *filepat, int *num_file, char_u ***file, int f #if defined(FEAT_EVAL) static int ExpandUserDefined(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file); static int ExpandUserList(expand_T *xp, int *num_file, char_u ***file); +#endif + +#ifdef FEAT_WILDMENU +// "compl_match_array" points the currently displayed list of entries in the +// popup menu. It is NULL when there is no popup menu. +static pumitem_T *compl_match_array = NULL; +static int compl_match_arraysize; +// First column in cmdline of the matched item for completion. +static int compl_startcol; +static int compl_selected; #endif static int @@ -245,6 +255,42 @@ nextwild( return OK; } +#if defined(FEAT_WILDMENU) || defined(PROTO) +/* + * Display the cmdline completion matches in a popup menu + */ +void cmdline_pum_display(void) +{ + pum_display(compl_match_array, compl_match_arraysize, compl_selected); +} + +int cmdline_pum_active(void) +{ + return p_wmnu && pum_visible() && compl_match_array != NULL; +} + +/* + * Remove the cmdline completion popup menu + */ +void cmdline_pum_remove(void) +{ + pum_undisplay(); + VIM_CLEAR(compl_match_array); + update_screen(0); +} + +void cmdline_pum_cleanup(cmdline_info_T *cclp) +{ + cmdline_pum_remove(); + wildmenu_cleanup(cclp); +} + +int cmdline_compl_startcol(void) +{ + return compl_startcol; +} +#endif + /* * Do wildcard expansion on the string 'str'. * Chars that should not be expanded must be preceded with a backslash. @@ -327,7 +373,12 @@ ExpandOne( findex = -1; } #ifdef FEAT_WILDMENU - if (p_wmnu) + if (compl_match_array) + { + compl_selected = findex; + cmdline_pum_display(); + } + else if (p_wmnu) win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files, findex, cmd_showtail); #endif @@ -339,6 +390,12 @@ ExpandOne( return NULL; } + if (mode == WILD_CANCEL) + ss = vim_strsave(orig_save ? orig_save : (char_u *)""); + else if (mode == WILD_APPLY) + ss = vim_strsave(findex == -1 ? (orig_save ? + orig_save : (char_u *)"") : xp->xp_files[findex]); + // free old names if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST) { @@ -351,7 +408,7 @@ ExpandOne( if (mode == WILD_FREE) // only release file name return NULL; - if (xp->xp_numfiles == -1) + if (xp->xp_numfiles == -1 && mode != WILD_APPLY && mode != WILD_CANCEL) { vim_free(orig_save); orig_save = orig; @@ -553,6 +610,35 @@ showmatches(expand_T *xp, int wildmenu UNUSED) showtail = cmd_showtail; } +#ifdef FEAT_WILDMENU + if (wildmenu && vim_strchr(p_wop, WOP_PUM) != NULL) + { + compl_match_arraysize = num_files; + compl_match_array = ALLOC_MULT(pumitem_T, compl_match_arraysize); + for (i = 0; i < num_files; i++) + { + compl_match_array[i].pum_text = L_SHOWFILE(i); + compl_match_array[i].pum_info = NULL; + compl_match_array[i].pum_extra = NULL; + compl_match_array[i].pum_kind = NULL; + } + compl_startcol = ccline->cmdpos + 1; + columns = vim_strsize(xp->xp_pattern); + if (showtail) + { + columns += vim_strsize(sm_gettail(files_found[0])); + columns -= vim_strsize(files_found[0]); + } + if (columns >= compl_startcol) + compl_startcol = 0; + else + compl_startcol -= columns; + compl_selected = -1; + cmdline_pum_display(); + return EXPAND_OK; + } +#endif + #ifdef FEAT_WILDMENU if (!wildmenu) { @@ -1500,7 +1586,7 @@ set_one_cmd_context( case CMD_tjump: case CMD_stjump: case CMD_ptjump: - if (*p_wop != NUL) + if (vim_strchr(p_wop, WOP_TAGFILE) != NULL) xp->xp_context = EXPAND_TAGS_LISTFILES; else xp->xp_context = EXPAND_TAGS; @@ -2639,6 +2725,22 @@ wildmenu_translate_key( { int c = key; +#ifdef FEAT_WILDMENU + if (p_wmnu && cmdline_pum_active()) + { + // When the popup menu is used, Up/Down keys go to the previous and + // next items in the menu and Left/Right keys go up/down a directory. + if (c == K_UP) + c = K_LEFT; + else if (c == K_DOWN) + c = K_RIGHT; + else if (c == K_LEFT) + c = K_UP; + else if (c == K_RIGHT) + c = K_DOWN; + } +#endif + if (did_wild_list && p_wmnu) { if (c == K_LEFT) @@ -2646,6 +2748,7 @@ wildmenu_translate_key( else if (c == K_RIGHT) c = Ctrl_N; } + // Hitting CR after "emenu Name.": complete submenu if (xp->xp_context == EXPAND_MENUNAMES && p_wmnu && cclp->cmdpos > 1 diff --git a/src/drawscreen.c b/src/drawscreen.c index 5b9619e9fa..6cae313fa0 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -3048,6 +3048,10 @@ redraw_after_callback(int call_update_screen, int do_message) } else if (State & CMDLINE) { +#ifdef FEAT_WILDMENU + if (pum_visible()) + cmdline_pum_display(); +#endif // Don't redraw when in prompt_for_number(). if (cmdline_row > 0) { diff --git a/src/evalfunc.c b/src/evalfunc.c index b031369efd..db0d1ceedb 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -10336,7 +10336,7 @@ f_visualmode(typval_T *argvars, typval_T *rettv) f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_WILDMENU - if (wild_menu_showing) + if (wild_menu_showing || ((State & CMDLINE) && cmdline_pum_active())) rettv->vval.v_number = 1; #endif } diff --git a/src/ex_getln.c b/src/ex_getln.c index 097b97eeb3..5def8a6a24 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -924,9 +924,18 @@ cmdline_wildchar_complete( // if 'wildmode' contains "list" may still need to list if (xp->xp_numfiles > 1 && !*did_wild_list - && (wim_flags[wim_index] & WIM_LIST)) + && ((wim_flags[wim_index] & WIM_LIST) +#ifdef FEAT_WILDMENU + || (p_wmnu && (wim_flags[wim_index] & WIM_FULL) != 0) +#endif + )) { +#ifdef FEAT_WILDMENU + (void)showmatches(xp, + p_wmnu && ((wim_flags[wim_index] & WIM_LIST) == 0)); +#else (void)showmatches(xp, FALSE); +#endif redrawcmd(); *did_wild_list = TRUE; } @@ -1848,6 +1857,23 @@ getcmdline_int( #ifdef FEAT_WILDMENU c = wildmenu_translate_key(&ccline, c, &xpc, did_wild_list); + + if (cmdline_pum_active()) + { + if (c == Ctrl_E || c == Ctrl_Y) + { + int wild_type; + + wild_type = (c == Ctrl_E) ? WILD_CANCEL : WILD_APPLY; + + if (nextwild(&xpc, wild_type, WILD_NO_BEEP, + firstc != '@') == FAIL) + break; + cmdline_pum_cleanup(&ccline); + xpc.xp_context = EXPAND_NOTHING; + goto cmdline_changed; + } + } #endif // free expanded names when finished walking through matches @@ -1856,6 +1882,9 @@ getcmdline_int( && c != Ctrl_N && c != Ctrl_P && c != Ctrl_A && c != Ctrl_L) { +#ifdef FEAT_WILDMENU + cmdline_pum_remove(); +#endif (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); did_wild_list = FALSE; #ifdef FEAT_WILDMENU @@ -1950,10 +1979,19 @@ getcmdline_int( // goes to last match, in a clumsy way if (c == K_S_TAB && KeyTyped) { - if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK - && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK - && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK) - goto cmdline_changed; + if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK) + { +#ifdef FEAT_WILDMENU + // Trigger the popup menu when wildoptions=pum + showmatches(&xpc, + p_wmnu && ((wim_flags[wim_index] & WIM_LIST) == 0)); +#else + (void)showmatches(&xpc, FALSE); +#endif + if (nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK + && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK) + goto cmdline_changed; + } } if (c == NUL || c == K_ZERO) // NUL is stored as NL @@ -2222,6 +2260,13 @@ getcmdline_int( case Ctrl_A: // all matches if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL) break; +#ifdef FEAT_WILDMENU + if (cmdline_pum_active()) + { + cmdline_pum_cleanup(&ccline); + xpc.xp_context = EXPAND_NOTHING; + } +#endif goto cmdline_changed; case Ctrl_L: diff --git a/src/option.h b/src/option.h index c79eb0bdd7..ebbf94b069 100644 --- a/src/option.h +++ b/src/option.h @@ -356,6 +356,11 @@ typedef enum { #define WIM_LIST 0x04 #define WIM_BUFLASTUSED 0x08 +// flags for the 'wildoptions' option +// each defined char should be unique over all values. +#define WOP_TAGFILE 't' +#define WOP_PUM 'p' + // arguments for can_bs() // each defined char should be unique over all values // except for BS_START, that intentionally also matches BS_NOSTOP diff --git a/src/optionstr.c b/src/optionstr.c index 8d74ba0d59..c8bef03099 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -57,7 +57,7 @@ static char *(p_tbis_values[]) = {"tiny", "small", "medium", "large", "huge", "g static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL}; #endif static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", "none", "NONE", NULL}; -static char *(p_wop_values[]) = {"tagfile", NULL}; +static char *(p_wop_values[]) = {"tagfile", "pum", NULL}; #ifdef FEAT_WAK static char *(p_wak_values[]) = {"yes", "menu", "no", NULL}; #endif diff --git a/src/popupmenu.c b/src/popupmenu.c index cf5558b074..cf2f2eff97 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -116,7 +116,10 @@ pum_display( // Remember the essential parts of the window position and size, so we // can decide when to reposition the popup menu. pum_window = curwin; - pum_win_row = curwin->w_wrow + W_WINROW(curwin); + if (State == CMDLINE) + pum_win_row = cmdline_row; + else + pum_win_row = curwin->w_wrow + W_WINROW(curwin); pum_win_height = curwin->w_height; pum_win_col = curwin->w_wincol; pum_win_wcol = curwin->w_wcol; @@ -215,6 +218,11 @@ pum_display( max_width = pum_base_width; // Calculate column +#ifdef FEAT_WILDMENU + if (State == CMDLINE) + cursor_col = cmdline_compl_startcol(); + else +#endif #ifdef FEAT_RIGHTLEFT if (curwin->w_p_rl) cursor_col = curwin->w_wincol + curwin->w_width diff --git a/src/proto/cmdexpand.pro b/src/proto/cmdexpand.pro index 1c4f954394..b64c6bbdc6 100644 --- a/src/proto/cmdexpand.pro +++ b/src/proto/cmdexpand.pro @@ -3,6 +3,11 @@ int nextwild(expand_T *xp, int type, int options, int escape); char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode); void ExpandInit(expand_T *xp); void ExpandCleanup(expand_T *xp); +void cmdline_pum_display(void); +int cmdline_pum_active(void); +void cmdline_pum_remove(void); +void cmdline_pum_cleanup(cmdline_info_T *cclp); +int cmdline_compl_startcol(void); int showmatches(expand_T *xp, int wildmenu); char_u *sm_gettail(char_u *s); char_u *addstar(char_u *fname, int len, int context); diff --git a/src/testdir/dumps/Test_wildmenu_pum_01.dump b/src/testdir/dumps/Test_wildmenu_pum_01.dump new file mode 100644 index 0000000000..8c48229949 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_01.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#e0e0e08|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e> @62 diff --git a/src/testdir/dumps/Test_wildmenu_pum_02.dump b/src/testdir/dumps/Test_wildmenu_pum_02.dump new file mode 100644 index 0000000000..f118df78e1 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_02.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |l|i|s|t> @64 diff --git a/src/testdir/dumps/Test_wildmenu_pum_03.dump b/src/testdir/dumps/Test_wildmenu_pum_03.dump new file mode 100644 index 0000000000..c3276ab387 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_03.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |p|l|a|c|e> @63 diff --git a/src/testdir/dumps/Test_wildmenu_pum_04.dump b/src/testdir/dumps/Test_wildmenu_pum_04.dump new file mode 100644 index 0000000000..f118df78e1 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_04.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |l|i|s|t> @64 diff --git a/src/testdir/dumps/Test_wildmenu_pum_05.dump b/src/testdir/dumps/Test_wildmenu_pum_05.dump new file mode 100644 index 0000000000..1c3a2e885a --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_05.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |j|u|m|p> @64 diff --git a/src/testdir/dumps/Test_wildmenu_pum_06.dump b/src/testdir/dumps/Test_wildmenu_pum_06.dump new file mode 100644 index 0000000000..4b60c5745f --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_06.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| > @68 diff --git a/src/testdir/dumps/Test_wildmenu_pum_07.dump b/src/testdir/dumps/Test_wildmenu_pum_07.dump new file mode 100644 index 0000000000..20a39ab3ff --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_07.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e> @61 diff --git a/src/testdir/dumps/Test_wildmenu_pum_08.dump b/src/testdir/dumps/Test_wildmenu_pum_08.dump new file mode 100644 index 0000000000..73547387eb --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_08.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |u|n> @66 diff --git a/src/testdir/dumps/Test_wildmenu_pum_09.dump b/src/testdir/dumps/Test_wildmenu_pum_09.dump new file mode 100644 index 0000000000..2e8a0a16b3 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_09.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @3| +0#0000001#e0e0e08|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |u|n|d|e|f|i|n|e> @60 diff --git a/src/testdir/dumps/Test_wildmenu_pum_10.dump b/src/testdir/dumps/Test_wildmenu_pum_10.dump new file mode 100644 index 0000000000..9851b7ce3f --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_10.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e> @61 diff --git a/src/testdir/dumps/Test_wildmenu_pum_11.dump b/src/testdir/dumps/Test_wildmenu_pum_11.dump new file mode 100644 index 0000000000..4697c8a562 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_11.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @10| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@46 +|~| @10| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@46 +|~| @10| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@46 +|~| @10| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@46 +|~| @10| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@46 +|~| @10| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@46 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=> @55 diff --git a/src/testdir/dumps/Test_wildmenu_pum_12.dump b/src/testdir/dumps/Test_wildmenu_pum_12.dump new file mode 100644 index 0000000000..d93631de77 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_12.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @17| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@39 +|~| @17| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@39 +|~| @17| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@39 +|~| @17| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@39 +|~| @17| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@39 +|~| @17| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@39 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=| |c|u|l|h|l|=> @48 diff --git a/src/testdir/dumps/Test_wildmenu_pum_13.dump b/src/testdir/dumps/Test_wildmenu_pum_13.dump new file mode 100644 index 0000000000..b2b1424f56 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_13.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @24| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@32 +|~| @24| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@32 +|~| @24| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@32 +|~| @24| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@32 +|~| @24| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@32 +|~| @24| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@32 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=| |c|u|l|h|l|=| |c|u|l|h|l|=> @41 diff --git a/src/testdir/dumps/Test_wildmenu_pum_14.dump b/src/testdir/dumps/Test_wildmenu_pum_14.dump new file mode 100644 index 0000000000..78da67f409 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_14.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @5| +0#0000001#e0e0e08|X|d|i|r|A|/| @8| +0#4040ff13#ffffff0@51 +|~| @5| +0#0000001#ffd7ff255|X|f|i|l|e|A| @8| +0#4040ff13#ffffff0@51 +|:+0#0000000&|e| |X|d|i|r|/|X|d|i|r|A|/> @60 diff --git a/src/testdir/dumps/Test_wildmenu_pum_15.dump b/src/testdir/dumps/Test_wildmenu_pum_15.dump new file mode 100644 index 0000000000..fa4f50b2f6 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_15.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @11| +0#0000001#e0e0e08|X|d|i|r|B|/| @8| +0#4040ff13#ffffff0@45 +|~| @11| +0#0000001#ffd7ff255|X|f|i|l|e|B| @8| +0#4040ff13#ffffff0@45 +|:+0#0000000&|e| |X|d|i|r|/|X|d|i|r|A|/|X|d|i|r|B|/> @54 diff --git a/src/testdir/dumps/Test_wildmenu_pum_16.dump b/src/testdir/dumps/Test_wildmenu_pum_16.dump new file mode 100644 index 0000000000..78da67f409 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_16.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @5| +0#0000001#e0e0e08|X|d|i|r|A|/| @8| +0#4040ff13#ffffff0@51 +|~| @5| +0#0000001#ffd7ff255|X|f|i|l|e|A| @8| +0#4040ff13#ffffff0@51 +|:+0#0000000&|e| |X|d|i|r|/|X|d|i|r|A|/> @60 diff --git a/src/testdir/dumps/Test_wildmenu_pum_17.dump b/src/testdir/dumps/Test_wildmenu_pum_17.dump new file mode 100644 index 0000000000..5eef94d82a --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_17.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |j|u|m|p| |l|i|s|t| |p|l|a|c|e| |u|n|d|e|f|i|n|e| |u|n|p|l|a|c|e> @29 diff --git a/src/testdir/dumps/Test_wildmenu_pum_18.dump b/src/testdir/dumps/Test_wildmenu_pum_18.dump new file mode 100644 index 0000000000..09b0b3e609 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_18.dump @@ -0,0 +1,10 @@ +|~+0#4040ff13#ffffff0| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| @62 +|d|e|f|i|n|e| @68 +|:|s|i|g|n| |d|e|f|i|n|e> @62 diff --git a/src/testdir/dumps/Test_wildmenu_pum_19.dump b/src/testdir/dumps/Test_wildmenu_pum_19.dump new file mode 100644 index 0000000000..fa51c76eb6 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_19.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|d|e|f|i|n|e| @8| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|j|u|m|p| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|l|i|s|t| @10| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#e0e0e08|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |u|n|d|e|f|i|n|e> @60 diff --git a/src/testdir/dumps/Test_wildmenu_pum_20.dump b/src/testdir/dumps/Test_wildmenu_pum_20.dump new file mode 100644 index 0000000000..99c2900a80 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_20.dump @@ -0,0 +1,10 @@ +> +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@74 diff --git a/src/testdir/dumps/Test_wildmenu_pum_21.dump b/src/testdir/dumps/Test_wildmenu_pum_21.dump new file mode 100644 index 0000000000..ca379318eb --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_21.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e|x> @61 diff --git a/src/testdir/dumps/Test_wildmenu_pum_22.dump b/src/testdir/dumps/Test_wildmenu_pum_22.dump new file mode 100644 index 0000000000..3fd00ade37 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_22.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|[+1&&|N|o| |N|a|m|e|]| @65 +|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#0000000&|l|o|n|g|e|s|t|,+0#af5f00255&|f+0#0000000&|u|l@1| @48 +|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#0000000&|f|u|l@1| @56 +|:+0#4040ff13&|s+0#af5f00255&|i|g|n| +0#0000000&|d|e|f|i|n|e| @62 +|:+0#4040ff13&|s+0#af5f00255&|i|g|n| +0#0000000&|d|e|f|i|n|e> @62 +|~+0#4040ff13&| @73 +|~| @73 +|[+3#0000000&|C|o|m@1|a|n|d| |L|i|n|e|]| @60 +|Y+0#0000001#ffff4012|o|u| |d|i|s|c|o|v|e|r|e|d| |t|h|e| |c|o|m@1|a|n|d|-|l|i|n|e| |w|i|n|d|o|w|!| |Y|o|u| |c|a|n| |c|l|o|s|e| |i|t| |w|i|t|h| |"|:|q|"|.| +0#0000000#ffffff0@7 diff --git a/src/testdir/dumps/Test_wildmenu_pum_23.dump b/src/testdir/dumps/Test_wildmenu_pum_23.dump new file mode 100644 index 0000000000..0bd624350c --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_23.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +0#4040ff13#ffffff0@53 +|:+0#0000000&|s|i|g|n| |u> @67 diff --git a/src/testdir/dumps/Test_wildmenu_pum_24.dump b/src/testdir/dumps/Test_wildmenu_pum_24.dump new file mode 100644 index 0000000000..f5767f7f04 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_24.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000001#e0e0e08|b|u|f|d|o| @9| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|b|u|f@1|e|r| @8| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|b|u|f@1|e|r|s| @7| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|b|u|n|l|o|a|d| @7| +0#4040ff13#ffffff0@58 +|:+0#0000000&|b|u|f|d|o> @68 diff --git a/src/testdir/dumps/Test_wildmenu_pum_25.dump b/src/testdir/dumps/Test_wildmenu_pum_25.dump new file mode 100644 index 0000000000..b7d117d829 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_25.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|b|u|f|d>o| @68 diff --git a/src/testdir/dumps/Test_wildmenu_pum_26.dump b/src/testdir/dumps/Test_wildmenu_pum_26.dump new file mode 100644 index 0000000000..30786c9d01 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_26.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |d|e|f|i|n> @63 diff --git a/src/testdir/dumps/Test_wildmenu_pum_27.dump b/src/testdir/dumps/Test_wildmenu_pum_27.dump new file mode 100644 index 0000000000..4b60c5745f --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_27.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| > @68 diff --git a/src/testdir/dumps/Test_wildmenu_pum_28.dump b/src/testdir/dumps/Test_wildmenu_pum_28.dump new file mode 100644 index 0000000000..910e224a08 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_28.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&> @73 diff --git a/src/testdir/dumps/Test_wildmenu_pum_29.dump b/src/testdir/dumps/Test_wildmenu_pum_29.dump new file mode 100644 index 0000000000..7a82fce735 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_pum_29.dump @@ -0,0 +1,10 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&|s|i|g|n| |x|y|z> @65 diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index abd12467dd..7faf811dbd 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -1965,4 +1965,177 @@ func Test_suffixes_opt() call delete('Xfile.o') endfunc +" Test for using a popup menu for the command line completion matches +" (wildoptions=pum) +func Test_wildmenu_pum() + CheckRunVimInTerminal + + let commands =<< trim [CODE] + set wildmenu + set wildoptions=pum + set shm+=I + set noruler + set noshowcmd + [CODE] + call writefile(commands, 'Xtest') + + let buf = RunVimInTerminal('-S Xtest', #{rows: 10}) + + call term_sendkeys(buf, ":sign \") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_01', {}) + + call term_sendkeys(buf, "\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_02', {}) + + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_03', {}) + + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_04', {}) + + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_05', {}) + + " pressing should end completion and go back to the original match + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_06', {}) + + " pressing should select the current match and end completion + call term_sendkeys(buf, "\\\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_07', {}) + + " With 'wildmode' set to 'longest,full', completing a match should display + " the longest match, the wildmenu should not be displayed. + call term_sendkeys(buf, ":\set wildmode=longest,full\") + call TermWait(buf) + call term_sendkeys(buf, ":sign u\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_08', {}) + + " pressing should display the wildmenu + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_09', {}) + + " pressing second time should select the next entry in the menu + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_10', {}) + + call term_sendkeys(buf, ":\set wildmode=full\") + " " showing popup menu in different columns in the cmdline + call term_sendkeys(buf, ":sign define \") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_11', {}) + + call term_sendkeys(buf, " \") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_12', {}) + + call term_sendkeys(buf, " \") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_13', {}) + + " Directory name completion + call mkdir('Xdir/XdirA/XdirB', 'p') + call writefile([], 'Xdir/XfileA') + call writefile([], 'Xdir/XdirA/XfileB') + call writefile([], 'Xdir/XdirA/XdirB/XfileC') + + call term_sendkeys(buf, "\e Xdi\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_14', {}) + + " Pressing on a directory name should go into that directory + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_15', {}) + + " Pressing on a directory name should go to the parent directory + call term_sendkeys(buf, "\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_16', {}) + + " Pressing when the popup menu is displayed should list all the + " matches and remove the popup menu + call term_sendkeys(buf, "\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_17', {}) + + " Pressing when the popup menu is displayed should remove the popup + " menu + call term_sendkeys(buf, "\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_18', {}) + + " Pressing should open the popup menu with the last entry selected + call term_sendkeys(buf, "\\:sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_19', {}) + + " Pressing should close the popup menu and cancel the cmd line + call term_sendkeys(buf, "\\:sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_20', {}) + + " Typing a character when the popup is open, should close the popup + call term_sendkeys(buf, ":sign \x") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_21', {}) + + " When the popup is open, entering the cmdline window should close the popup + call term_sendkeys(buf, "\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_22', {}) + call term_sendkeys(buf, ":q\") + + " After the last popup menu item, should show the original string + call term_sendkeys(buf, ":sign u\\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_23', {}) + + " Use the popup menu for the command name + call term_sendkeys(buf, "\bu\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_24', {}) + + " Pressing the left arrow should remove the popup menu + call term_sendkeys(buf, "\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_25', {}) + + " Pressing should remove the popup menu and erase the last character + call term_sendkeys(buf, "\\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_26', {}) + + " Pressing should remove the popup menu and erase the previous word + call term_sendkeys(buf, "\\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_27', {}) + + " Pressing should remove the popup menu and erase the entire line + call term_sendkeys(buf, "\\sign \\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_28', {}) + + " Using to cancel the popup menu and then pressing should recall + " the cmdline from history + call term_sendkeys(buf, "sign xyz\:sign \\\") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_wildmenu_pum_29', {}) + + call term_sendkeys(buf, "\\") + call StopVimInTerminal(buf) + call delete('Xtest') + call delete('Xdir', 'rf') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index cefbd4089f..ff7f2f0291 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4325, /**/ 4324, /**/ diff --git a/src/vim.h b/src/vim.h index 33d294c9f1..67b4e33c1b 100644 --- a/src/vim.h +++ b/src/vim.h @@ -809,6 +809,8 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); #define WILD_ALL 6 #define WILD_LONGEST 7 #define WILD_ALL_KEEP 8 +#define WILD_CANCEL 9 +#define WILD_APPLY 10 #define WILD_LIST_NOTFOUND 0x01 #define WILD_HOME_REPLACE 0x02 -- cgit v1.2.3