1
0
forked from aniani/vim

patch 8.0.1649: no completion for argument list commands

Problem:    No completion for argument list commands.
Solution:   Add arglist completion. (Yegappan Lakshmanan, closes #2706)
This commit is contained in:
Bram Moolenaar
2018-03-29 15:55:38 +02:00
parent 1b2f61e732
commit cd43effeca
9 changed files with 35 additions and 0 deletions

View File

@@ -4469,6 +4469,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
specifies what for. The following completion types are specifies what for. The following completion types are
supported: supported:
arglist file names in argument list
augroup autocmd groups augroup autocmd groups
buffer buffer names buffer buffer names
behave :behave suboptions behave :behave suboptions

View File

@@ -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 However, by specifying one or the other of the following attributes, argument
completion can be enabled: completion can be enabled:
-complete=arglist file names in argument list
-complete=augroup autocmd groups -complete=augroup autocmd groups
-complete=buffer buffer names -complete=buffer buffer names
-complete=behave :behave suboptions -complete=behave :behave suboptions

View File

@@ -3314,6 +3314,21 @@ alist_add_list(
#endif /* FEAT_LISTCMDS */ #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 #ifdef FEAT_EVAL
/* /*
* ":compiler[!] {name}" * ":compiler[!] {name}"

View File

@@ -4293,6 +4293,13 @@ set_one_cmd_context(
break; break;
#endif #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 */ #endif /* FEAT_CMDL_COMPL */
default: default:
@@ -5879,6 +5886,7 @@ static struct
char *name; char *name;
} command_complete[] = } command_complete[] =
{ {
{EXPAND_ARGLIST, "arglist"},
{EXPAND_AUGROUP, "augroup"}, {EXPAND_AUGROUP, "augroup"},
{EXPAND_BEHAVE, "behave"}, {EXPAND_BEHAVE, "behave"},
{EXPAND_BUFFERS, "buffer"}, {EXPAND_BUFFERS, "buffer"},

View File

@@ -4989,6 +4989,7 @@ ExpandFromContext(
#endif #endif
{EXPAND_ENV_VARS, get_env_name, TRUE, TRUE}, {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
{EXPAND_USER, get_users, TRUE, FALSE}, {EXPAND_USER, get_users, TRUE, FALSE},
{EXPAND_ARGLIST, get_arglist_name, TRUE, FALSE},
}; };
int i; int i;

View File

@@ -67,6 +67,7 @@ void ex_argedit(exarg_T *eap);
void ex_argadd(exarg_T *eap); void ex_argadd(exarg_T *eap);
void ex_argdelete(exarg_T *eap); void ex_argdelete(exarg_T *eap);
void ex_listdo(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_compiler(exarg_T *eap);
void ex_runtime(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); int do_in_path(char_u *path, char_u *name, int flags, void (*callback)(char_u *fname, void *ck), void *cookie);

View File

@@ -137,6 +137,11 @@ func Test_getcompletion()
let l = getcompletion('v:notexists', 'var') let l = getcompletion('v:notexists', 'var')
call assert_equal([], l) 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') let l = getcompletion('', 'augroup')
call assert_true(index(l, 'END') >= 0) call assert_true(index(l, 'END') >= 0)
let l = getcompletion('blahblah', 'augroup') let l = getcompletion('blahblah', 'augroup')

View File

@@ -766,6 +766,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 */
/**/
1649,
/**/ /**/
1648, 1648,
/**/ /**/

View File

@@ -781,6 +781,7 @@ extern int (*dyn_libintl_putenv)(const char *envstring);
#define EXPAND_PACKADD 45 #define EXPAND_PACKADD 45
#define EXPAND_MESSAGES 46 #define EXPAND_MESSAGES 46
#define EXPAND_MAPCLEAR 47 #define EXPAND_MAPCLEAR 47
#define EXPAND_ARGLIST 48
/* Values for exmode_active (0 is no exmode) */ /* Values for exmode_active (0 is no exmode) */
#define EXMODE_NORMAL 1 #define EXMODE_NORMAL 1