summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-03-29 15:55:38 +0200
committerBram Moolenaar <Bram@vim.org>2018-03-29 15:55:38 +0200
commitcd43effecab02c6c28b1c4a3a14f91b8c3f26c0d (patch)
treec1ff349ca80fe49e0070b1366c4cfb5aad448590
parent1b2f61e732a961c1345bf3bb6826c1caa870c10d (diff)
patch 8.0.1649: no completion for argument list commandsv8.0.1649
Problem: No completion for argument list commands. Solution: Add arglist completion. (Yegappan Lakshmanan, closes #2706)
-rw-r--r--runtime/doc/eval.txt1
-rw-r--r--runtime/doc/map.txt1
-rw-r--r--src/ex_cmds2.c15
-rw-r--r--src/ex_docmd.c8
-rw-r--r--src/ex_getln.c1
-rw-r--r--src/proto/ex_cmds2.pro1
-rw-r--r--src/testdir/test_cmdline.vim5
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
9 files changed, 35 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 387186f83d..e5f0b10a57 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -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
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 2efeb3bc61..18763f439f 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -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
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index ae4ce337d0..d4ddb82b7b 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -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}"
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 97bbd04291..c2d69670b8 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -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:
@@ -5879,6 +5886,7 @@ static struct
char *name;
} command_complete[] =
{
+ {EXPAND_ARGLIST, "arglist"},
{EXPAND_AUGROUP, "augroup"},
{EXPAND_BEHAVE, "behave"},
{EXPAND_BUFFERS, "buffer"},
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 6119ad2163..48cccf18e0 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -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;
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 63d377d64b..a7d19d768f 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -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);
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 832413e813..8755fbf1aa 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -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')
diff --git a/src/version.c b/src/version.c
index 00a07bc106..1e277129c3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -767,6 +767,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1649,
+/**/
1648,
/**/
1647,
diff --git a/src/vim.h b/src/vim.h
index 42007edb6f..626c0ad120 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -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