forked from aniani/vim
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)
This commit is contained in:
committed by
Bram Moolenaar
parent
3787f26c2e
commit
3908ef5017
@@ -8974,7 +8974,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
|
mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
|
||||||
the possible matches are shown just above the command line, with the
|
the possible matches are shown just above the command line, with the
|
||||||
first match highlighted (overwriting the status line, if there is
|
first match highlighted (overwriting the status line, if there is
|
||||||
one). Keys that show the previous/next match, such as <Tab> or
|
one). This is the behavior without "pum" in 'wildoptions.
|
||||||
|
Keys that show the previous/next match, such as <Tab> or
|
||||||
CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
|
CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
|
||||||
When 'wildmode' is used, "wildmenu" mode is used where "full" is
|
When 'wildmode' is used, "wildmenu" mode is used where "full" is
|
||||||
specified. "longest" and "list" do not start "wildmenu" mode.
|
specified. "longest" and "list" do not start "wildmenu" mode.
|
||||||
@@ -8982,10 +8983,12 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
If there are more matches than can fit in the line, a ">" is shown on
|
If there are more matches than can fit in the line, a ">" is shown on
|
||||||
the right and/or a "<" is shown on the left. The status line scrolls
|
the right and/or a "<" is shown on the left. The status line scrolls
|
||||||
as needed.
|
as needed.
|
||||||
|
When 'wildoptions' contains "pum", then the completion matches are
|
||||||
|
shown in a popup menu.
|
||||||
The "wildmenu" mode is abandoned when a key is hit that is not used
|
The "wildmenu" mode is abandoned when a key is hit that is not used
|
||||||
for selecting a completion.
|
for selecting a completion.
|
||||||
While the "wildmenu" is active the following keys have special
|
While the "wildmenu" is active, not using the popup menu, the
|
||||||
meanings:
|
following keys have special meanings:
|
||||||
|
|
||||||
<Left> <Right> - select previous/next match (like CTRL-P/CTRL-N)
|
<Left> <Right> - select previous/next match (like CTRL-P/CTRL-N)
|
||||||
<Down> - in filename/menu name completion: move into a
|
<Down> - in filename/menu name completion: move into a
|
||||||
@@ -8995,6 +8998,21 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
<Up> - in filename/menu name completion: move up into
|
<Up> - in filename/menu name completion: move up into
|
||||||
parent directory or parent menu.
|
parent directory or parent menu.
|
||||||
|
|
||||||
|
When using the popup menu for command line completion, the following
|
||||||
|
keys have special meanings:
|
||||||
|
<Down> - select next match (like CTRL-N)
|
||||||
|
<Left> - in filename/menu name completion: move up into
|
||||||
|
parent directory or parent menu.
|
||||||
|
<Right> - in filename/menu name completion: move into a
|
||||||
|
subdirectory or submenu.
|
||||||
|
<Up> - select previous match (like CTRL-P)
|
||||||
|
CTRL-E - end completion, go back to what was there before
|
||||||
|
selecting a match.
|
||||||
|
CTRL-N - go to the next entry
|
||||||
|
CTRL-P - go to the previous entry
|
||||||
|
CTRL-Y - accept the currently selected match and stop
|
||||||
|
completion.
|
||||||
|
|
||||||
This makes the menus accessible from the console |console-menus|.
|
This makes the menus accessible from the console |console-menus|.
|
||||||
|
|
||||||
If you prefer the <Left> and <Right> keys to move the cursor instead
|
If you prefer the <Left> and <Right> keys to move the cursor instead
|
||||||
@@ -9057,14 +9075,15 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
global
|
global
|
||||||
{not available when compiled without the |+wildignore|
|
{not available when compiled without the |+wildignore|
|
||||||
feature}
|
feature}
|
||||||
A list of words that change how command line completion is done.
|
A list of words that change how |cmdline-completion| is done.
|
||||||
Currently only one word is allowed:
|
The following values are supported:
|
||||||
|
pum Display the completion matches using the popupmenu
|
||||||
|
in the same style as the |ins-completion-menu|.
|
||||||
tagfile When using CTRL-D to list matching tags, the kind of
|
tagfile When using CTRL-D to list matching tags, the kind of
|
||||||
tag and the file of the tag is listed. Only one match
|
tag and the file of the tag is listed. Only one match
|
||||||
is displayed per line. Often used tag kinds are:
|
is displayed per line. Often used tag kinds are:
|
||||||
d #define
|
d #define
|
||||||
f function
|
f function
|
||||||
Also see |cmdline-completion|.
|
|
||||||
|
|
||||||
*'winaltkeys'* *'wak'*
|
*'winaltkeys'* *'wak'*
|
||||||
'winaltkeys' 'wak' string (default "menu")
|
'winaltkeys' 'wak' string (default "menu")
|
||||||
|
109
src/cmdexpand.c
109
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)
|
#if defined(FEAT_EVAL)
|
||||||
static int ExpandUserDefined(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file);
|
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);
|
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
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -245,6 +255,42 @@ nextwild(
|
|||||||
return OK;
|
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'.
|
* Do wildcard expansion on the string 'str'.
|
||||||
* Chars that should not be expanded must be preceded with a backslash.
|
* Chars that should not be expanded must be preceded with a backslash.
|
||||||
@@ -327,7 +373,12 @@ ExpandOne(
|
|||||||
findex = -1;
|
findex = -1;
|
||||||
}
|
}
|
||||||
#ifdef FEAT_WILDMENU
|
#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,
|
win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files,
|
||||||
findex, cmd_showtail);
|
findex, cmd_showtail);
|
||||||
#endif
|
#endif
|
||||||
@@ -339,6 +390,12 @@ ExpandOne(
|
|||||||
return NULL;
|
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
|
// free old names
|
||||||
if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
|
if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
|
||||||
{
|
{
|
||||||
@@ -351,7 +408,7 @@ ExpandOne(
|
|||||||
if (mode == WILD_FREE) // only release file name
|
if (mode == WILD_FREE) // only release file name
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (xp->xp_numfiles == -1)
|
if (xp->xp_numfiles == -1 && mode != WILD_APPLY && mode != WILD_CANCEL)
|
||||||
{
|
{
|
||||||
vim_free(orig_save);
|
vim_free(orig_save);
|
||||||
orig_save = orig;
|
orig_save = orig;
|
||||||
@@ -553,6 +610,35 @@ showmatches(expand_T *xp, int wildmenu UNUSED)
|
|||||||
showtail = cmd_showtail;
|
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
|
#ifdef FEAT_WILDMENU
|
||||||
if (!wildmenu)
|
if (!wildmenu)
|
||||||
{
|
{
|
||||||
@@ -1500,7 +1586,7 @@ set_one_cmd_context(
|
|||||||
case CMD_tjump:
|
case CMD_tjump:
|
||||||
case CMD_stjump:
|
case CMD_stjump:
|
||||||
case CMD_ptjump:
|
case CMD_ptjump:
|
||||||
if (*p_wop != NUL)
|
if (vim_strchr(p_wop, WOP_TAGFILE) != NULL)
|
||||||
xp->xp_context = EXPAND_TAGS_LISTFILES;
|
xp->xp_context = EXPAND_TAGS_LISTFILES;
|
||||||
else
|
else
|
||||||
xp->xp_context = EXPAND_TAGS;
|
xp->xp_context = EXPAND_TAGS;
|
||||||
@@ -2639,6 +2725,22 @@ wildmenu_translate_key(
|
|||||||
{
|
{
|
||||||
int c = 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 (did_wild_list && p_wmnu)
|
||||||
{
|
{
|
||||||
if (c == K_LEFT)
|
if (c == K_LEFT)
|
||||||
@@ -2646,6 +2748,7 @@ wildmenu_translate_key(
|
|||||||
else if (c == K_RIGHT)
|
else if (c == K_RIGHT)
|
||||||
c = Ctrl_N;
|
c = Ctrl_N;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hitting CR after "emenu Name.": complete submenu
|
// Hitting CR after "emenu Name.": complete submenu
|
||||||
if (xp->xp_context == EXPAND_MENUNAMES && p_wmnu
|
if (xp->xp_context == EXPAND_MENUNAMES && p_wmnu
|
||||||
&& cclp->cmdpos > 1
|
&& cclp->cmdpos > 1
|
||||||
|
@@ -3048,6 +3048,10 @@ redraw_after_callback(int call_update_screen, int do_message)
|
|||||||
}
|
}
|
||||||
else if (State & CMDLINE)
|
else if (State & CMDLINE)
|
||||||
{
|
{
|
||||||
|
#ifdef FEAT_WILDMENU
|
||||||
|
if (pum_visible())
|
||||||
|
cmdline_pum_display();
|
||||||
|
#endif
|
||||||
// Don't redraw when in prompt_for_number().
|
// Don't redraw when in prompt_for_number().
|
||||||
if (cmdline_row > 0)
|
if (cmdline_row > 0)
|
||||||
{
|
{
|
||||||
|
@@ -10336,7 +10336,7 @@ f_visualmode(typval_T *argvars, typval_T *rettv)
|
|||||||
f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
||||||
{
|
{
|
||||||
#ifdef FEAT_WILDMENU
|
#ifdef FEAT_WILDMENU
|
||||||
if (wild_menu_showing)
|
if (wild_menu_showing || ((State & CMDLINE) && cmdline_pum_active()))
|
||||||
rettv->vval.v_number = 1;
|
rettv->vval.v_number = 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -924,9 +924,18 @@ cmdline_wildchar_complete(
|
|||||||
// if 'wildmode' contains "list" may still need to list
|
// if 'wildmode' contains "list" may still need to list
|
||||||
if (xp->xp_numfiles > 1
|
if (xp->xp_numfiles > 1
|
||||||
&& !*did_wild_list
|
&& !*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);
|
(void)showmatches(xp, FALSE);
|
||||||
|
#endif
|
||||||
redrawcmd();
|
redrawcmd();
|
||||||
*did_wild_list = TRUE;
|
*did_wild_list = TRUE;
|
||||||
}
|
}
|
||||||
@@ -1848,6 +1857,23 @@ getcmdline_int(
|
|||||||
|
|
||||||
#ifdef FEAT_WILDMENU
|
#ifdef FEAT_WILDMENU
|
||||||
c = wildmenu_translate_key(&ccline, c, &xpc, did_wild_list);
|
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
|
#endif
|
||||||
|
|
||||||
// free expanded names when finished walking through matches
|
// 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_N && c != Ctrl_P && c != Ctrl_A
|
||||||
&& c != Ctrl_L)
|
&& c != Ctrl_L)
|
||||||
{
|
{
|
||||||
|
#ifdef FEAT_WILDMENU
|
||||||
|
cmdline_pum_remove();
|
||||||
|
#endif
|
||||||
(void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
|
(void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
|
||||||
did_wild_list = FALSE;
|
did_wild_list = FALSE;
|
||||||
#ifdef FEAT_WILDMENU
|
#ifdef FEAT_WILDMENU
|
||||||
@@ -1950,10 +1979,19 @@ getcmdline_int(
|
|||||||
// <S-Tab> goes to last match, in a clumsy way
|
// <S-Tab> goes to last match, in a clumsy way
|
||||||
if (c == K_S_TAB && KeyTyped)
|
if (c == K_S_TAB && KeyTyped)
|
||||||
{
|
{
|
||||||
if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK
|
if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK)
|
||||||
&& nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
|
{
|
||||||
&& nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
|
#ifdef FEAT_WILDMENU
|
||||||
goto cmdline_changed;
|
// 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
|
if (c == NUL || c == K_ZERO) // NUL is stored as NL
|
||||||
@@ -2222,6 +2260,13 @@ getcmdline_int(
|
|||||||
case Ctrl_A: // all matches
|
case Ctrl_A: // all matches
|
||||||
if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
|
if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
|
||||||
break;
|
break;
|
||||||
|
#ifdef FEAT_WILDMENU
|
||||||
|
if (cmdline_pum_active())
|
||||||
|
{
|
||||||
|
cmdline_pum_cleanup(&ccline);
|
||||||
|
xpc.xp_context = EXPAND_NOTHING;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
goto cmdline_changed;
|
goto cmdline_changed;
|
||||||
|
|
||||||
case Ctrl_L:
|
case Ctrl_L:
|
||||||
|
@@ -356,6 +356,11 @@ typedef enum {
|
|||||||
#define WIM_LIST 0x04
|
#define WIM_LIST 0x04
|
||||||
#define WIM_BUFLASTUSED 0x08
|
#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()
|
// arguments for can_bs()
|
||||||
// each defined char should be unique over all values
|
// each defined char should be unique over all values
|
||||||
// except for BS_START, that intentionally also matches BS_NOSTOP
|
// except for BS_START, that intentionally also matches BS_NOSTOP
|
||||||
|
@@ -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};
|
static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
|
||||||
#endif
|
#endif
|
||||||
static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", "none", "NONE", NULL};
|
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
|
#ifdef FEAT_WAK
|
||||||
static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
|
static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
|
||||||
#endif
|
#endif
|
||||||
|
@@ -116,7 +116,10 @@ pum_display(
|
|||||||
// Remember the essential parts of the window position and size, so we
|
// Remember the essential parts of the window position and size, so we
|
||||||
// can decide when to reposition the popup menu.
|
// can decide when to reposition the popup menu.
|
||||||
pum_window = curwin;
|
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_height = curwin->w_height;
|
||||||
pum_win_col = curwin->w_wincol;
|
pum_win_col = curwin->w_wincol;
|
||||||
pum_win_wcol = curwin->w_wcol;
|
pum_win_wcol = curwin->w_wcol;
|
||||||
@@ -215,6 +218,11 @@ pum_display(
|
|||||||
max_width = pum_base_width;
|
max_width = pum_base_width;
|
||||||
|
|
||||||
// Calculate column
|
// Calculate column
|
||||||
|
#ifdef FEAT_WILDMENU
|
||||||
|
if (State == CMDLINE)
|
||||||
|
cursor_col = cmdline_compl_startcol();
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef FEAT_RIGHTLEFT
|
#ifdef FEAT_RIGHTLEFT
|
||||||
if (curwin->w_p_rl)
|
if (curwin->w_p_rl)
|
||||||
cursor_col = curwin->w_wincol + curwin->w_width
|
cursor_col = curwin->w_wincol + curwin->w_width
|
||||||
|
@@ -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);
|
char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode);
|
||||||
void ExpandInit(expand_T *xp);
|
void ExpandInit(expand_T *xp);
|
||||||
void ExpandCleanup(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);
|
int showmatches(expand_T *xp, int wildmenu);
|
||||||
char_u *sm_gettail(char_u *s);
|
char_u *sm_gettail(char_u *s);
|
||||||
char_u *addstar(char_u *fname, int len, int context);
|
char_u *addstar(char_u *fname, int len, int context);
|
||||||
|
10
src/testdir/dumps/Test_wildmenu_pum_01.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_01.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_02.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_02.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_03.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_03.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_04.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_04.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_05.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_05.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_06.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_06.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|:+0#0000000&|s|i|g|n| > @68
|
10
src/testdir/dumps/Test_wildmenu_pum_07.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_07.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_08.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_08.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_09.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_09.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_10.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_10.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_11.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_11.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_12.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_12.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_13.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_13.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_14.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_14.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_15.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_15.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_16.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_16.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_17.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_17.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_18.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_18.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_19.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_19.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_20.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_20.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
> +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@74
|
10
src/testdir/dumps/Test_wildmenu_pum_21.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_21.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_22.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_22.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_23.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_23.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_24.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_24.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_25.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_25.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_26.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_26.dump
Normal file
@@ -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
|
10
src/testdir/dumps/Test_wildmenu_pum_27.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_27.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|:+0#0000000&|s|i|g|n| > @68
|
10
src/testdir/dumps/Test_wildmenu_pum_28.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_28.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|:+0#0000000&> @73
|
10
src/testdir/dumps/Test_wildmenu_pum_29.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_29.dump
Normal file
@@ -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
|
@@ -1965,4 +1965,177 @@ func Test_suffixes_opt()
|
|||||||
call delete('Xfile.o')
|
call delete('Xfile.o')
|
||||||
endfunc
|
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 \<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_01', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Down>\<Down>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_02', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<C-N>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_03', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<C-P>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_04', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Up>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_05', {})
|
||||||
|
|
||||||
|
" pressing <C-E> should end completion and go back to the original match
|
||||||
|
call term_sendkeys(buf, "\<C-E>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_06', {})
|
||||||
|
|
||||||
|
" pressing <C-Y> should select the current match and end completion
|
||||||
|
call term_sendkeys(buf, "\<Tab>\<C-P>\<C-P>\<C-Y>")
|
||||||
|
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, ":\<C-U>set wildmode=longest,full\<CR>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call term_sendkeys(buf, ":sign u\<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_08', {})
|
||||||
|
|
||||||
|
" pressing <Tab> should display the wildmenu
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_09', {})
|
||||||
|
|
||||||
|
" pressing <Tab> second time should select the next entry in the menu
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_10', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":\<C-U>set wildmode=full\<CR>")
|
||||||
|
" " showing popup menu in different columns in the cmdline
|
||||||
|
call term_sendkeys(buf, ":sign define \<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_11', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, " \<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_12', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, " \<Tab>")
|
||||||
|
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, "\<C-U>e Xdi\<Tab>\<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_14', {})
|
||||||
|
|
||||||
|
" Pressing <Right> on a directory name should go into that directory
|
||||||
|
call term_sendkeys(buf, "\<Right>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_15', {})
|
||||||
|
|
||||||
|
" Pressing <Left> on a directory name should go to the parent directory
|
||||||
|
call term_sendkeys(buf, "\<Left>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_16', {})
|
||||||
|
|
||||||
|
" Pressing <C-A> when the popup menu is displayed should list all the
|
||||||
|
" matches and remove the popup menu
|
||||||
|
call term_sendkeys(buf, "\<C-U>sign \<Tab>\<C-A>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_17', {})
|
||||||
|
|
||||||
|
" Pressing <C-D> when the popup menu is displayed should remove the popup
|
||||||
|
" menu
|
||||||
|
call term_sendkeys(buf, "\<C-U>sign \<Tab>\<C-D>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_18', {})
|
||||||
|
|
||||||
|
" Pressing <S-Tab> should open the popup menu with the last entry selected
|
||||||
|
call term_sendkeys(buf, "\<C-U>\<CR>:sign \<S-Tab>\<C-P>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_19', {})
|
||||||
|
|
||||||
|
" Pressing <Esc> should close the popup menu and cancel the cmd line
|
||||||
|
call term_sendkeys(buf, "\<C-U>\<CR>:sign \<Tab>\<Esc>")
|
||||||
|
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 \<Tab>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, "\<C-U>sign \<Tab>\<C-F>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_22', {})
|
||||||
|
call term_sendkeys(buf, ":q\<CR>")
|
||||||
|
|
||||||
|
" After the last popup menu item, <C-N> should show the original string
|
||||||
|
call term_sendkeys(buf, ":sign u\<Tab>\<C-N>\<C-N>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_23', {})
|
||||||
|
|
||||||
|
" Use the popup menu for the command name
|
||||||
|
call term_sendkeys(buf, "\<C-U>bu\<Tab>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_24', {})
|
||||||
|
|
||||||
|
" Pressing the left arrow should remove the popup menu
|
||||||
|
call term_sendkeys(buf, "\<Left>\<Left>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_25', {})
|
||||||
|
|
||||||
|
" Pressing <BS> should remove the popup menu and erase the last character
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<C-U>sign \<Tab>\<BS>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_26', {})
|
||||||
|
|
||||||
|
" Pressing <C-W> should remove the popup menu and erase the previous word
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<C-U>sign \<Tab>\<C-W>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_27', {})
|
||||||
|
|
||||||
|
" Pressing <C-U> should remove the popup menu and erase the entire line
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<C-U>sign \<Tab>\<C-U>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_28', {})
|
||||||
|
|
||||||
|
" Using <C-E> to cancel the popup menu and then pressing <Up> should recall
|
||||||
|
" the cmdline from history
|
||||||
|
call term_sendkeys(buf, "sign xyz\<Esc>:sign \<Tab>\<C-E>\<Up>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_29', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<C-U>\<CR>")
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('Xtest')
|
||||||
|
call delete('Xdir', 'rf')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
4325,
|
||||||
/**/
|
/**/
|
||||||
4324,
|
4324,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -809,6 +809,8 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
|
|||||||
#define WILD_ALL 6
|
#define WILD_ALL 6
|
||||||
#define WILD_LONGEST 7
|
#define WILD_LONGEST 7
|
||||||
#define WILD_ALL_KEEP 8
|
#define WILD_ALL_KEEP 8
|
||||||
|
#define WILD_CANCEL 9
|
||||||
|
#define WILD_APPLY 10
|
||||||
|
|
||||||
#define WILD_LIST_NOTFOUND 0x01
|
#define WILD_LIST_NOTFOUND 0x01
|
||||||
#define WILD_HOME_REPLACE 0x02
|
#define WILD_HOME_REPLACE 0x02
|
||||||
|
Reference in New Issue
Block a user