Patch 8.2.0925
Problem:    Getcompletion() does not return command line arguments.
Solution:   Add the "cmdline" option. (Shougo, closes #1140)
Files:      runtime/doc/eval.txt, src/cmdexpand.c,
            src/testdir/test_cmdline.vim


*** ../vim-8.2.0924/runtime/doc/eval.txt        2020-06-07 18:16:31.307293302 
+0200
--- runtime/doc/eval.txt        2020-06-07 18:26:24.937198831 +0200
***************
*** 5104,5109 ****
--- 5112,5118 ----
                behave          :behave suboptions
                color           color schemes
                command         Ex command (and arguments)
+               cmdline         |cmdline-completion| result
                compiler        compilers
                cscope          |:cscope| suboptions
                diff_buffer     |:diffget| and |:diffput| completion
***************
*** 5134,5147 ****
                user            user names
                var             user variables
  
!               If {pat} is an empty string, then all the matches are returned.
!               Otherwise only items matching {pat} are returned. See
!               |wildcards| for the use of special characters in {pat}.
  
                If the optional {filtered} flag is set to 1, then 'wildignore'
                is applied to filter the results.  Otherwise all the matches
                are returned. The 'wildignorecase' option always applies.
  
                If there are no matches, an empty list is returned.  An
                invalid value for {type} produces an error.
  
--- 5143,5161 ----
                user            user names
                var             user variables
  
!               If {pat} is an empty string, then all the matches are
!               returned.  Otherwise only items matching {pat} are returned.
!               See |wildcards| for the use of special characters in {pat}.
  
                If the optional {filtered} flag is set to 1, then 'wildignore'
                is applied to filter the results.  Otherwise all the matches
                are returned. The 'wildignorecase' option always applies.
  
+               If {type} is "cmdline", then the |cmdline-completion| result is
+               returned.  For example, to complete the possible values after
+               a ":call" command: >
+                       echo getcompletion('call ', 'cmdline')
+ <
                If there are no matches, an empty list is returned.  An
                invalid value for {type} produces an error.
  
*** ../vim-8.2.0924/src/cmdexpand.c     2020-04-02 21:13:21.392362410 +0200
--- src/cmdexpand.c     2020-06-07 18:36:55.083032803 +0200
***************
*** 2675,2684 ****
  f_getcompletion(typval_T *argvars, typval_T *rettv)
  {
      char_u    *pat;
      expand_T  xpc;
      int               filtered = FALSE;
      int               options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
!                                       | WILD_NO_BEEP;
  
      if (argvars[2].v_type != VAR_UNKNOWN)
        filtered = tv_get_number_chk(&argvars[2], NULL);
--- 2675,2692 ----
  f_getcompletion(typval_T *argvars, typval_T *rettv)
  {
      char_u    *pat;
+     char_u    *type;
      expand_T  xpc;
      int               filtered = FALSE;
      int               options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
!                                                               | WILD_NO_BEEP;
! 
!     if (argvars[1].v_type != VAR_STRING)
!     {
!       semsg(_(e_invarg2), "type must be a string");
!       return;
!     }
!     type = tv_get_string(&argvars[1]);
  
      if (argvars[2].v_type != VAR_UNKNOWN)
        filtered = tv_get_number_chk(&argvars[2], NULL);
***************
*** 2691,2729 ****
        options |= WILD_KEEP_ALL;
  
      ExpandInit(&xpc);
!     xpc.xp_pattern = tv_get_string(&argvars[0]);
!     xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!     xpc.xp_context = cmdcomplete_str_to_type(tv_get_string(&argvars[1]));
!     if (xpc.xp_context == EXPAND_NOTHING)
      {
!       if (argvars[1].v_type == VAR_STRING)
!           semsg(_(e_invarg2), argvars[1].vval.v_string);
!       else
!           emsg(_(e_invarg));
!       return;
      }
! 
! # if defined(FEAT_MENU)
!     if (xpc.xp_context == EXPAND_MENUS)
      {
!       set_context_in_menu_cmd(&xpc, (char_u *)"menu", xpc.xp_pattern, FALSE);
        xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!     }
  # endif
  # ifdef FEAT_CSCOPE
!     if (xpc.xp_context == EXPAND_CSCOPE)
!     {
!       set_context_in_cscope_cmd(&xpc, xpc.xp_pattern, CMD_cscope);
!       xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!     }
  # endif
  # ifdef FEAT_SIGNS
!     if (xpc.xp_context == EXPAND_SIGN)
!     {
!       set_context_in_sign_cmd(&xpc, xpc.xp_pattern);
!       xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!     }
  # endif
  
      pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
      if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL))
--- 2699,2743 ----
        options |= WILD_KEEP_ALL;
  
      ExpandInit(&xpc);
!     if (STRCMP(type, "cmdline") == 0)
      {
!       set_one_cmd_context(&xpc, tv_get_string(&argvars[0]));
!       xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
      }
!     else
      {
!       xpc.xp_pattern = tv_get_string(&argvars[0]);
        xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
! 
!       xpc.xp_context = cmdcomplete_str_to_type(type);
!       if (xpc.xp_context == EXPAND_NOTHING)
!       {
!           semsg(_(e_invarg2), type);
!           return;
!       }
! 
! # if defined(FEAT_MENU)
!       if (xpc.xp_context == EXPAND_MENUS)
!       {
!           set_context_in_menu_cmd(&xpc, (char_u *)"menu", xpc.xp_pattern, 
FALSE);
!           xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!       }
  # endif
  # ifdef FEAT_CSCOPE
!       if (xpc.xp_context == EXPAND_CSCOPE)
!       {
!           set_context_in_cscope_cmd(&xpc, xpc.xp_pattern, CMD_cscope);
!           xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!       }
  # endif
  # ifdef FEAT_SIGNS
!       if (xpc.xp_context == EXPAND_SIGN)
!       {
!           set_context_in_sign_cmd(&xpc, xpc.xp_pattern);
!           xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
!       }
  # endif
+     }
  
      pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
      if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL))
*** ../vim-8.2.0924/src/testdir/test_cmdline.vim        2020-06-07 
17:30:28.716850169 +0200
--- src/testdir/test_cmdline.vim        2020-06-07 18:37:34.950897019 +0200
***************
*** 355,360 ****
--- 355,374 ----
      call assert_equal(['Testing'], l)
    endif
  
+   " Command line completion tests
+   let l = getcompletion('cd ', 'cmdline')
+   call assert_true(index(l, 'samples/') >= 0)
+   let l = getcompletion('cd NoMatch', 'cmdline')
+   call assert_equal([], l)
+   let l = getcompletion('let v:n', 'cmdline')
+   call assert_true(index(l, 'v:null') >= 0)
+   let l = getcompletion('let v:notexists', 'cmdline')
+   call assert_equal([], l)
+   let l = getcompletion('call tag', 'cmdline')
+   call assert_true(index(l, 'taglist(') >= 0)
+   let l = getcompletion('call paint', 'cmdline')
+   call assert_equal([], l)
+ 
    " For others test if the name is recognized.
    let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 
'tag_listfiles', 'user']
    if has('cmdline_hist')
***************
*** 379,385 ****
    set tags&
  
    call assert_fails('call getcompletion("", "burp")', 'E475:')
!   call assert_fails('call getcompletion("abc", [])', 'E474:')
  endfunc
  
  func Test_shellcmd_completion()
--- 393,399 ----
    set tags&
  
    call assert_fails('call getcompletion("", "burp")', 'E475:')
!   call assert_fails('call getcompletion("abc", [])', 'E475:')
  endfunc
  
  func Test_shellcmd_completion()
*** ../vim-8.2.0924/src/version.c       2020-06-07 18:16:31.311293288 +0200
--- src/version.c       2020-06-07 18:24:42.449556884 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     925,
  /**/

-- 
Eight Megabytes And Continually Swapping.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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/202006071645.057GjdiP091736%40masaka.moolenaar.net.

Raspunde prin e-mail lui