Patch 8.2.4325
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)
Files:      runtime/doc/options.txt, src/vim.h, src/cmdexpand.c,
            src/drawscreen.c, src/evalfunc.c, src/ex_getln.c, src/option.h,
            src/optionstr.c, src/popupmenu.c, src/proto/cmdexpand.pro,
            src/testdir/test_cmdline.vim,
            src/testdir/dumps/Test_wildmenu_pum_01.dump,
            src/testdir/dumps/Test_wildmenu_pum_02.dump,
            src/testdir/dumps/Test_wildmenu_pum_03.dump,
            src/testdir/dumps/Test_wildmenu_pum_04.dump,
            src/testdir/dumps/Test_wildmenu_pum_05.dump,
            src/testdir/dumps/Test_wildmenu_pum_06.dump,
            src/testdir/dumps/Test_wildmenu_pum_07.dump,
            src/testdir/dumps/Test_wildmenu_pum_08.dump,
            src/testdir/dumps/Test_wildmenu_pum_09.dump,
            src/testdir/dumps/Test_wildmenu_pum_10.dump,
            src/testdir/dumps/Test_wildmenu_pum_11.dump,
            src/testdir/dumps/Test_wildmenu_pum_12.dump,
            src/testdir/dumps/Test_wildmenu_pum_13.dump,
            src/testdir/dumps/Test_wildmenu_pum_14.dump,
            src/testdir/dumps/Test_wildmenu_pum_15.dump,
            src/testdir/dumps/Test_wildmenu_pum_16.dump,
            src/testdir/dumps/Test_wildmenu_pum_17.dump,
            src/testdir/dumps/Test_wildmenu_pum_18.dump,
            src/testdir/dumps/Test_wildmenu_pum_19.dump,
            src/testdir/dumps/Test_wildmenu_pum_20.dump,
            src/testdir/dumps/Test_wildmenu_pum_21.dump,
            src/testdir/dumps/Test_wildmenu_pum_22.dump,
            src/testdir/dumps/Test_wildmenu_pum_23.dump,
            src/testdir/dumps/Test_wildmenu_pum_24.dump,
            src/testdir/dumps/Test_wildmenu_pum_25.dump,
            src/testdir/dumps/Test_wildmenu_pum_26.dump,
            src/testdir/dumps/Test_wildmenu_pum_27.dump,
            src/testdir/dumps/Test_wildmenu_pum_28.dump,
            src/testdir/dumps/Test_wildmenu_pum_29.dump


*** ../vim-8.2.4324/runtime/doc/options.txt     2022-01-29 11:22:11.827641991 
+0000
--- runtime/doc/options.txt     2022-02-08 11:23:16.591841984 +0000
***************
*** 8945,8951 ****
        mode.  On pressing 'wildchar' (usually <Tab>) to invoke completion,
        the possible matches are shown just above the command line, with the
        first match highlighted (overwriting the status line, if there is
!       one).  Keys that show the previous/next match, such as <Tab> or
        CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
        When 'wildmode' is used, "wildmenu" mode is used where "full" is
        specified.  "longest" and "list" do not start "wildmenu" mode.
--- 8974,8981 ----
        mode.  On pressing 'wildchar' (usually <Tab>) to invoke completion,
        the possible matches are shown just above the command line, with the
        first match highlighted (overwriting the status line, if there is
!       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.
        When 'wildmode' is used, "wildmenu" mode is used where "full" is
        specified.  "longest" and "list" do not start "wildmenu" mode.
***************
*** 8953,8962 ****
        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
        as needed.
        The "wildmenu" mode is abandoned when a key is hit that is not used
        for selecting a completion.
!       While the "wildmenu" is active the following keys have special
!       meanings:
  
        <Left> <Right>  - select previous/next match (like CTRL-P/CTRL-N)
        <Down>          - in filename/menu name completion: move into a
--- 8983,8994 ----
        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
        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
        for selecting a completion.
!       While the "wildmenu" is active, not using the popup menu, the
!       following keys have special meanings:
  
        <Left> <Right>  - select previous/next match (like CTRL-P/CTRL-N)
        <Down>          - in filename/menu name completion: move into a
***************
*** 8966,8971 ****
--- 8998,9018 ----
        <Up>            - in filename/menu name completion: move up into
                          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|.
  
        If you prefer the <Left> and <Right> keys to move the cursor instead
***************
*** 9028,9041 ****
                        global
                        {not available when compiled without the |+wildignore|
                        feature}
!       A list of words that change how command line completion is done.
!       Currently only one word is allowed:
          tagfile       When using CTRL-D to list matching tags, the kind of
                        tag and the file of the tag is listed.  Only one match
                        is displayed per line.  Often used tag kinds are:
                                d       #define
                                f       function
-       Also see |cmdline-completion|.
  
                                                *'winaltkeys'* *'wak'*
  'winaltkeys' 'wak'    string  (default "menu")
--- 9075,9089 ----
                        global
                        {not available when compiled without the |+wildignore|
                        feature}
!       A list of words that change how |cmdline-completion| is done.
!       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
                        tag and the file of the tag is listed.  Only one match
                        is displayed per line.  Often used tag kinds are:
                                d       #define
                                f       function
  
                                                *'winaltkeys'* *'wak'*
  'winaltkeys' 'wak'    string  (default "menu")
*** ../vim-8.2.4324/src/vim.h   2022-02-07 10:45:12.803027327 +0000
--- src/vim.h   2022-02-08 11:13:54.924890127 +0000
***************
*** 809,814 ****
--- 809,816 ----
  #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
*** ../vim-8.2.4324/src/cmdexpand.c     2022-02-03 13:32:59.262208218 +0000
--- src/cmdexpand.c     2022-02-08 12:03:36.363953394 +0000
***************
*** 27,32 ****
--- 27,42 ----
  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
  sort_func_compare(const void *s1, const void *s2)
  {
***************
*** 245,250 ****
--- 255,296 ----
      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,333 ****
                    findex = -1;
            }
  #ifdef FEAT_WILDMENU
!           if (p_wmnu)
                win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files,
                                                        findex, cmd_showtail);
  #endif
--- 373,384 ----
                    findex = -1;
            }
  #ifdef FEAT_WILDMENU
!           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,344 ****
--- 390,401 ----
            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,357 ****
      if (mode == WILD_FREE)    // only release file name
        return NULL;
  
!     if (xp->xp_numfiles == -1)
      {
        vim_free(orig_save);
        orig_save = orig;
--- 408,414 ----
      if (mode == WILD_FREE)    // only release file name
        return NULL;
  
!     if (xp->xp_numfiles == -1 && mode != WILD_APPLY && mode != WILD_CANCEL)
      {
        vim_free(orig_save);
        orig_save = orig;
***************
*** 554,559 ****
--- 611,645 ----
      }
  
  #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)
      {
  #endif
***************
*** 1500,1506 ****
        case CMD_tjump:
        case CMD_stjump:
        case CMD_ptjump:
!           if (*p_wop != NUL)
                xp->xp_context = EXPAND_TAGS_LISTFILES;
            else
                xp->xp_context = EXPAND_TAGS;
--- 1586,1592 ----
        case CMD_tjump:
        case CMD_stjump:
        case CMD_ptjump:
!           if (vim_strchr(p_wop, WOP_TAGFILE) != NULL)
                xp->xp_context = EXPAND_TAGS_LISTFILES;
            else
                xp->xp_context = EXPAND_TAGS;
***************
*** 2639,2644 ****
--- 2725,2746 ----
  {
      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,2651 ****
--- 2748,2754 ----
        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
*** ../vim-8.2.4324/src/drawscreen.c    2022-02-03 13:32:59.262208218 +0000
--- src/drawscreen.c    2022-02-08 11:13:54.916890141 +0000
***************
*** 3048,3053 ****
--- 3048,3057 ----
      }
      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)
        {
*** ../vim-8.2.4324/src/evalfunc.c      2022-02-07 19:56:38.883286149 +0000
--- src/evalfunc.c      2022-02-08 11:13:54.920890134 +0000
***************
*** 10336,10342 ****
  f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
  {
  #ifdef FEAT_WILDMENU
!     if (wild_menu_showing)
        rettv->vval.v_number = 1;
  #endif
  }
--- 10336,10342 ----
  f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
  {
  #ifdef FEAT_WILDMENU
!     if (wild_menu_showing || ((State & CMDLINE) && cmdline_pum_active()))
        rettv->vval.v_number = 1;
  #endif
  }
*** ../vim-8.2.4324/src/ex_getln.c      2022-01-25 11:54:59.198464296 +0000
--- src/ex_getln.c      2022-02-08 11:28:07.371251817 +0000
***************
*** 924,932 ****
        // if 'wildmode' contains "list" may still need to list
        if (xp->xp_numfiles > 1
                && !*did_wild_list
!               && (wim_flags[wim_index] & WIM_LIST))
        {
            (void)showmatches(xp, FALSE);
            redrawcmd();
            *did_wild_list = TRUE;
        }
--- 924,941 ----
        // if 'wildmode' contains "list" may still need to list
        if (xp->xp_numfiles > 1
                && !*did_wild_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,1853 ****
--- 1857,1879 ----
  
  #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,1861 ****
--- 1882,1890 ----
                && 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,1959 ****
        // <S-Tab> 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 (c == NUL || c == K_ZERO)        // NUL is stored as NL
--- 1979,1997 ----
        // <S-Tab> goes to last match, in a clumsy way
        if (c == K_S_TAB && KeyTyped)
        {
!           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,2227 ****
--- 2260,2272 ----
        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:
*** ../vim-8.2.4324/src/option.h        2022-01-31 14:59:33.518943700 +0000
--- src/option.h        2022-02-08 11:13:54.920890134 +0000
***************
*** 356,361 ****
--- 356,366 ----
  #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
*** ../vim-8.2.4324/src/optionstr.c     2022-01-28 15:28:00.212927659 +0000
--- src/optionstr.c     2022-02-08 11:13:54.920890134 +0000
***************
*** 57,63 ****
  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};
  #ifdef FEAT_WAK
  static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
  #endif
--- 57,63 ----
  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", "pum", NULL};
  #ifdef FEAT_WAK
  static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
  #endif
*** ../vim-8.2.4324/src/popupmenu.c     2022-01-01 16:20:56.900401501 +0000
--- src/popupmenu.c     2022-02-08 11:13:54.920890134 +0000
***************
*** 116,122 ****
        // 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);
        pum_win_height = curwin->w_height;
        pum_win_col = curwin->w_wincol;
        pum_win_wcol = curwin->w_wcol;
--- 116,125 ----
        // Remember the essential parts of the window position and size, so we
        // can decide when to reposition the popup menu.
        pum_window = 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,220 ****
--- 218,228 ----
        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
*** ../vim-8.2.4324/src/proto/cmdexpand.pro     2020-09-04 14:37:27.861546325 
+0100
--- src/proto/cmdexpand.pro     2022-02-08 11:13:54.920890134 +0000
***************
*** 3,8 ****
--- 3,13 ----
  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);
*** ../vim-8.2.4324/src/testdir/test_cmdline.vim        2021-11-21 
12:13:53.112683595 +0000
--- src/testdir/test_cmdline.vim        2022-02-08 11:13:54.924890127 +0000
***************
*** 1965,1968 ****
--- 1965,2141 ----
    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 \<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-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_01.dump 2022-02-08 
12:05:18.691759923 +0000
--- src/testdir/dumps/Test_wildmenu_pum_01.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_02.dump 2022-02-08 
12:05:18.699759908 +0000
--- src/testdir/dumps/Test_wildmenu_pum_02.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_03.dump 2022-02-08 
12:05:18.703759901 +0000
--- src/testdir/dumps/Test_wildmenu_pum_03.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_04.dump 2022-02-08 
12:05:18.707759894 +0000
--- src/testdir/dumps/Test_wildmenu_pum_04.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_05.dump 2022-02-08 
12:05:18.711759885 +0000
--- src/testdir/dumps/Test_wildmenu_pum_05.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_06.dump 2022-02-08 
12:05:18.711759885 +0000
--- src/testdir/dumps/Test_wildmenu_pum_06.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 0 ****
--- 1,10 ----
+ | +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |:+0#0000000&|s|i|g|n| > @68
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_07.dump 2022-02-08 
12:05:18.715759878 +0000
--- src/testdir/dumps/Test_wildmenu_pum_07.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_08.dump 2022-02-08 
12:05:18.719759871 +0000
--- src/testdir/dumps/Test_wildmenu_pum_08.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_09.dump 2022-02-08 
12:05:18.723759862 +0000
--- src/testdir/dumps/Test_wildmenu_pum_09.dump 2022-02-08 11:48:16.197612760 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_10.dump 2022-02-08 
12:05:18.727759855 +0000
--- src/testdir/dumps/Test_wildmenu_pum_10.dump 2022-02-08 11:48:17.353610852 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_11.dump 2022-02-08 
12:05:18.731759849 +0000
--- src/testdir/dumps/Test_wildmenu_pum_11.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_12.dump 2022-02-08 
12:05:18.735759839 +0000
--- src/testdir/dumps/Test_wildmenu_pum_12.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_13.dump 2022-02-08 
12:05:18.739759832 +0000
--- src/testdir/dumps/Test_wildmenu_pum_13.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_14.dump 2022-02-08 
12:05:18.743759826 +0000
--- src/testdir/dumps/Test_wildmenu_pum_14.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_15.dump 2022-02-08 
12:05:18.747759817 +0000
--- src/testdir/dumps/Test_wildmenu_pum_15.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_16.dump 2022-02-08 
12:05:18.751759810 +0000
--- src/testdir/dumps/Test_wildmenu_pum_16.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_17.dump 2022-02-08 
12:05:18.755759803 +0000
--- src/testdir/dumps/Test_wildmenu_pum_17.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_18.dump 2022-02-08 
12:05:18.759759796 +0000
--- src/testdir/dumps/Test_wildmenu_pum_18.dump 2022-02-08 11:13:54.920890134 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_19.dump 2022-02-08 
12:05:18.763759787 +0000
--- src/testdir/dumps/Test_wildmenu_pum_19.dump 2022-02-08 11:48:22.549602248 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_20.dump 2022-02-08 
12:05:18.767759780 +0000
--- src/testdir/dumps/Test_wildmenu_pum_20.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 0 ****
--- 1,10 ----
+ > +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ | +0#0000000&@74
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_21.dump 2022-02-08 
12:05:18.771759773 +0000
--- src/testdir/dumps/Test_wildmenu_pum_21.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_22.dump 2022-02-08 
12:05:18.775759764 +0000
--- src/testdir/dumps/Test_wildmenu_pum_22.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_23.dump 2022-02-08 
12:05:18.783759751 +0000
--- src/testdir/dumps/Test_wildmenu_pum_23.dump 2022-02-08 11:48:24.045599766 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_24.dump 2022-02-08 
12:05:18.787759741 +0000
--- src/testdir/dumps/Test_wildmenu_pum_24.dump 2022-02-08 11:48:25.201597849 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_25.dump 2022-02-08 
12:05:18.791759734 +0000
--- src/testdir/dumps/Test_wildmenu_pum_25.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 0 ****
--- 1,10 ----
+ | +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |:+0#0000000&|b|u|f|d>o| @68
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_26.dump 2022-02-08 
12:05:18.795759728 +0000
--- src/testdir/dumps/Test_wildmenu_pum_26.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_27.dump 2022-02-08 
12:05:18.799759719 +0000
--- src/testdir/dumps/Test_wildmenu_pum_27.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 0 ****
--- 1,10 ----
+ | +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |:+0#0000000&|s|i|g|n| > @68
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_28.dump 2022-02-08 
12:05:18.803759712 +0000
--- src/testdir/dumps/Test_wildmenu_pum_28.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 0 ****
--- 1,10 ----
+ | +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |:+0#0000000&> @73
*** ../vim-8.2.4324/src/testdir/dumps/Test_wildmenu_pum_29.dump 2022-02-08 
12:05:18.807759705 +0000
--- src/testdir/dumps/Test_wildmenu_pum_29.dump 2022-02-08 11:13:54.924890127 
+0000
***************
*** 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
*** ../vim-8.2.4324/src/version.c       2022-02-07 21:53:58.089529481 +0000
--- src/version.c       2022-02-08 11:16:22.296632939 +0000
***************
*** 748,749 ****
--- 748,751 ----
  {   /* Add new patch number below this line */
+ /**/
+     4325,
  /**/

-- 
Bypasses are devices that allow some people to dash from point A to
point B very fast while other people dash from point B to point A very
fast.  People living at point C, being a point directly in between, are
often given to wonder what's so great about point A that so many people
from point B are so keen to get there and what's so great about point B
that so many people from point A are so keen to get there.  They often
wish that people would just once and for all work out where the hell
they wanted to be.
                -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220208120852.512F21C03A0%40moolenaar.net.

Raspunde prin e-mail lui