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:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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}"
|
||||||
|
@@ -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"},
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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')
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user