summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-01-08 18:28:22 +0100
committerBram Moolenaar <Bram@vim.org>2017-01-08 18:28:22 +0100
commit2d02839050a2557bf36dab37ccd9f92168a757d1 (patch)
treeabc07fdc4481657a1a0739f6dcc006c3cca51df5
parent453b576ee5d32e9b8e6876712748ae01f9be68dd (diff)
downloadvim-git-2d02839050a2557bf36dab37ccd9f92168a757d1.tar.gz
patch 8.0.0157: no completion for :syntax spell and :syntax syncv8.0.0157
Problem: No command line completion for ":syntax spell" and ":syntax sync". Solution: Implement the completion. (Dominique Pelle)
-rw-r--r--src/syntax.c38
-rw-r--r--src/testdir/test_syntax.vim6
-rw-r--r--src/version.c2
3 files changed, 40 insertions, 6 deletions
diff --git a/src/syntax.c b/src/syntax.c
index 80546bb02..bc5c9b74f 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6383,7 +6383,9 @@ syntax_present(win_T *win)
static enum
{
EXP_SUBCMD, /* expand ":syn" sub-commands */
- EXP_CASE /* expand ":syn case" arguments */
+ EXP_CASE, /* expand ":syn case" arguments */
+ EXP_SPELL, /* expand ":syn spell" arguments */
+ EXP_SYNC /* expand ":syn sync" arguments */
} expand_what;
/*
@@ -6434,6 +6436,10 @@ set_context_in_syntax_cmd(expand_T *xp, char_u *arg)
xp->xp_context = EXPAND_NOTHING;
else if (STRNICMP(arg, "case", p - arg) == 0)
expand_what = EXP_CASE;
+ else if (STRNICMP(arg, "spell", p - arg) == 0)
+ expand_what = EXP_SPELL;
+ else if (STRNICMP(arg, "sync", p - arg) == 0)
+ expand_what = EXP_SYNC;
else if ( STRNICMP(arg, "keyword", p - arg) == 0
|| STRNICMP(arg, "region", p - arg) == 0
|| STRNICMP(arg, "match", p - arg) == 0
@@ -6445,8 +6451,6 @@ set_context_in_syntax_cmd(expand_T *xp, char_u *arg)
}
}
-static char *(case_args[]) = {"match", "ignore", NULL};
-
/*
* Function given to ExpandGeneric() to obtain the list syntax names for
* expansion.
@@ -6454,9 +6458,31 @@ static char *(case_args[]) = {"match", "ignore", NULL};
char_u *
get_syntax_name(expand_T *xp UNUSED, int idx)
{
- if (expand_what == EXP_SUBCMD)
- return (char_u *)subcommands[idx].name;
- return (char_u *)case_args[idx];
+ switch (expand_what)
+ {
+ case EXP_SUBCMD:
+ return (char_u *)subcommands[idx].name;
+ case EXP_CASE:
+ {
+ static char *case_args[] = {"match", "ignore", NULL};
+ return (char_u *)case_args[idx];
+ }
+ case EXP_SPELL:
+ {
+ static char *spell_args[] =
+ {"toplevel", "notoplevel", "default", NULL};
+ return (char_u *)spell_args[idx];
+ }
+ case EXP_SYNC:
+ {
+ static char *sync_args[] =
+ {"ccomment", "clear", "fromstart",
+ "linebreaks=", "linecont", "lines=", "match",
+ "maxlines=", "minlines=", "region", NULL};
+ return (char_u *)sync_args[idx];
+ }
+ }
+ return NULL;
}
#endif /* FEAT_CMDL_COMPL */
diff --git a/src/testdir/test_syntax.vim b/src/testdir/test_syntax.vim
index 7cb67e677..23ef1549e 100644
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -150,6 +150,12 @@ func Test_syntax_completion()
call feedkeys(":syn case \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"syn case ignore match', @:)
+ call feedkeys(":syn spell \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"syn spell default notoplevel toplevel', @:)
+
+ call feedkeys(":syn sync \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"syn sync ccomment clear fromstart linebreaks= linecont lines= match maxlines= minlines= region', @:)
+
call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_match('^"syn list Boolean Character ', @:)
diff --git a/src/version.c b/src/version.c
index 350b4ad04..824a29275 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 157,
+/**/
156,
/**/
155,