Skip to content

Commit

Permalink
patch 8.0.1649: no completion for argument list commands
Browse files Browse the repository at this point in the history
Problem:    No completion for argument list commands.
Solution:   Add arglist completion. (Yegappan Lakshmanan, closes #2706)
  • Loading branch information
brammool committed Mar 29, 2018
1 parent 1b2f61e commit cd43eff
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 0 deletions.
1 change: 1 addition & 0 deletions runtime/doc/eval.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4469,6 +4469,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
specifies what for. The following completion types are
supported:

arglist file names in argument list
augroup autocmd groups
buffer buffer names
behave :behave suboptions
Expand Down
1 change: 1 addition & 0 deletions runtime/doc/map.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1272,6 +1272,7 @@ By default, the arguments of user defined commands do not undergo completion.
However, by specifying one or the other of the following attributes, argument
completion can be enabled:

-complete=arglist file names in argument list
-complete=augroup autocmd groups
-complete=buffer buffer names
-complete=behave :behave suboptions
Expand Down
15 changes: 15 additions & 0 deletions src/ex_cmds2.c
Original file line number Diff line number Diff line change
Expand Up @@ -3314,6 +3314,21 @@ alist_add_list(

#endif /* FEAT_LISTCMDS */

#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
/*
* Function given to ExpandGeneric() to obtain the possible arguments of the
* argedit and argdelete commands.
*/
char_u *
get_arglist_name(expand_T *xp UNUSED, int idx)
{
if (idx >= ARGCOUNT)
return NULL;

return alist_name(&ARGLIST[idx]);
}
#endif

#ifdef FEAT_EVAL
/*
* ":compiler[!] {name}"
Expand Down
8 changes: 8 additions & 0 deletions src/ex_docmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -4293,6 +4293,13 @@ set_one_cmd_context(
break;
#endif

case CMD_argdelete:
while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
arg = xp->xp_pattern + 1;
xp->xp_context = EXPAND_ARGLIST;
xp->xp_pattern = arg;
break;

#endif /* FEAT_CMDL_COMPL */

default:
Expand Down Expand Up @@ -5879,6 +5886,7 @@ static struct
char *name;
} command_complete[] =
{
{EXPAND_ARGLIST, "arglist"},
{EXPAND_AUGROUP, "augroup"},
{EXPAND_BEHAVE, "behave"},
{EXPAND_BUFFERS, "buffer"},
Expand Down
1 change: 1 addition & 0 deletions src/ex_getln.c
Original file line number Diff line number Diff line change
Expand Up @@ -4989,6 +4989,7 @@ ExpandFromContext(
#endif
{EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
{EXPAND_USER, get_users, TRUE, FALSE},
{EXPAND_ARGLIST, get_arglist_name, TRUE, FALSE},
};
int i;

Expand Down
1 change: 1 addition & 0 deletions src/proto/ex_cmds2.pro
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ void ex_argedit(exarg_T *eap);
void ex_argadd(exarg_T *eap);
void ex_argdelete(exarg_T *eap);
void ex_listdo(exarg_T *eap);
char_u *get_arglist_name(expand_T *xp, int idx);
void ex_compiler(exarg_T *eap);
void ex_runtime(exarg_T *eap);
int do_in_path(char_u *path, char_u *name, int flags, void (*callback)(char_u *fname, void *ck), void *cookie);
Expand Down
5 changes: 5 additions & 0 deletions src/testdir/test_cmdline.vim
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ func Test_getcompletion()
let l = getcompletion('v:notexists', 'var')
call assert_equal([], l)

args a.c b.c
let l = getcompletion('', 'arglist')
call assert_equal(['a.c', 'b.c'], l)
%argdelete

let l = getcompletion('', 'augroup')
call assert_true(index(l, 'END') >= 0)
let l = getcompletion('blahblah', 'augroup')
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1649,
/**/
1648,
/**/
Expand Down
1 change: 1 addition & 0 deletions src/vim.h
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,7 @@ extern int (*dyn_libintl_putenv)(const char *envstring);
#define EXPAND_PACKADD 45
#define EXPAND_MESSAGES 46
#define EXPAND_MAPCLEAR 47
#define EXPAND_ARGLIST 48

/* Values for exmode_active (0 is no exmode) */
#define EXMODE_NORMAL 1
Expand Down

0 comments on commit cd43eff

Please sign in to comment.