updated for version 7.1-036
diff --git a/src/eval.c b/src/eval.c
index 6ce7bef..5dc6c01 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1411,7 +1411,8 @@
}
-#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
+#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
+ || defined(FEAT_COMPL_FUNC) || defined(PROTO)
/*
* Call some vimL function and return the result in "*rettv".
* Uses argv[argc] for the function arguments.
@@ -1484,6 +1485,7 @@
return ret;
}
+# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
/*
* Call vimL function "func" and return the result as a string.
* Returns NULL when calling the function fails.
@@ -1506,8 +1508,9 @@
clear_tv(&rettv);
return retval;
}
+# endif
-#if defined(FEAT_COMPL_FUNC) || defined(PROTO)
+# if defined(FEAT_COMPL_FUNC) || defined(PROTO)
/*
* Call vimL function "func" and return the result as a number.
* Returns -1 when calling the function fails.
@@ -1530,7 +1533,7 @@
clear_tv(&rettv);
return retval;
}
-#endif
+# endif
/*
* Call vimL function "func" and return the result as a list
@@ -1556,9 +1559,9 @@
return rettv.vval.v_list;
}
-
#endif
+
/*
* Save the current function call pointer, and set it to NULL.
* Used when executing autocommands and for ":source".
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a623a52..3605a42 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3406,14 +3406,13 @@
case CMD_windo:
return arg;
-#ifdef FEAT_SEARCH_EXTRA
+#ifdef FEAT_CMDL_COMPL
+# ifdef FEAT_SEARCH_EXTRA
case CMD_match:
if (*arg == NUL || !ends_excmd(*arg))
{
- /* Dummy call to clear variables. */
- set_context_in_highlight_cmd(xp, (char_u *)"link n");
- xp->xp_context = EXPAND_HIGHLIGHT;
- xp->xp_pattern = arg;
+ /* also complete "None" */
+ set_context_in_echohl_cmd(xp, arg);
arg = skipwhite(skiptowhite(arg));
if (*arg != NUL)
{
@@ -3422,9 +3421,8 @@
}
}
return find_nextcmd(arg);
-#endif
+# endif
-#ifdef FEAT_CMDL_COMPL
/*
* All completion for the +cmdline_compl feature goes here.
*/
@@ -3622,8 +3620,7 @@
break;
case CMD_echohl:
- xp->xp_context = EXPAND_HIGHLIGHT;
- xp->xp_pattern = arg;
+ set_context_in_echohl_cmd(xp, arg);
break;
#endif
case CMD_highlight:
diff --git a/src/ex_getln.c b/src/ex_getln.c
index e59eb1b..a5975e9 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -268,7 +268,9 @@
{
xpc.xp_context = ccline.xp_context;
xpc.xp_pattern = ccline.cmdbuff;
+# if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
xpc.xp_arg = ccline.xp_arg;
+# endif
}
#endif
@@ -4151,13 +4153,19 @@
#ifdef FEAT_EVAL
if (ccline.cmdfirstc == '=')
+ {
+# ifdef FEAT_CMDL_COMPL
/* pass CMD_SIZE because there is no real command */
set_context_for_expression(xp, str, CMD_SIZE);
+# endif
+ }
else if (ccline.input_fn)
{
xp->xp_context = ccline.xp_context;
xp->xp_pattern = ccline.cmdbuff;
+# if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
xp->xp_arg = ccline.xp_arg;
+# endif
}
else
#endif
@@ -4505,6 +4513,12 @@
if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
sort_strings(*file, *num_file);
+#ifdef FEAT_CMDL_COMPL
+ /* Reset the variables used for special highlight names expansion, so that
+ * they don't show up when getting normal highlight names by ID. */
+ reset_expand_highlight();
+#endif
+
return OK;
}
diff --git a/src/proto/syntax.pro b/src/proto/syntax.pro
index c33a890..4fe0801 100644
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -8,6 +8,8 @@
void syntax_clear __ARGS((buf_T *buf));
void ex_syntax __ARGS((exarg_T *eap));
int syntax_present __ARGS((buf_T *buf));
+void reset_expand_highlight __ARGS((void));
+void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
diff --git a/src/syntax.c b/src/syntax.c
index c023486..ef962ef 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -66,8 +66,10 @@
#define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
#ifdef FEAT_CMDL_COMPL
-static int include_default = FALSE; /* include "default" for expansion */
-static int include_link = FALSE; /* include "link" for expansion */
+/* Flags to indicate an additional string for highlight name completion. */
+static int include_none = 0; /* when 1 include "None" */
+static int include_default = 0; /* when 1 include "default" */
+static int include_link = 0; /* when 2 include "link" and "clear" */
#endif
/*
@@ -5968,6 +5970,29 @@
EXP_CASE /* expand ":syn case" arguments */
} expand_what;
+/*
+ * Reset include_link, include_default, include_none to 0.
+ * Called when we are done expanding.
+ */
+ void
+reset_expand_highlight()
+{
+ include_link = include_default = include_none = 0;
+}
+
+/*
+ * Handle command line completion for :match and :echohl command: Add "None"
+ * as highlight group.
+ */
+ void
+set_context_in_echohl_cmd(xp, arg)
+ expand_T *xp;
+ char_u *arg;
+{
+ xp->xp_context = EXPAND_HIGHLIGHT;
+ xp->xp_pattern = arg;
+ include_none = 1;
+}
/*
* Handle command line completion for :syntax command.
@@ -5983,8 +6008,8 @@
xp->xp_context = EXPAND_SYNTAX;
expand_what = EXP_SUBCMD;
xp->xp_pattern = arg;
- include_link = FALSE;
- include_default = FALSE;
+ include_link = 0;
+ include_default = 0;
/* (part of) subcommand already typed */
if (*arg != NUL)
@@ -8949,7 +8974,7 @@
return OK;
}
-#ifdef FEAT_CMDL_COMPL
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
static void highlight_list __ARGS((void));
static void highlight_list_two __ARGS((int cnt, int attr));
@@ -8967,8 +8992,8 @@
/* Default: expand group names */
xp->xp_context = EXPAND_HIGHLIGHT;
xp->xp_pattern = arg;
- include_link = TRUE;
- include_default = TRUE;
+ include_link = 2;
+ include_default = 1;
/* (part of) subcommand already typed */
if (*arg != NUL)
@@ -8976,7 +9001,7 @@
p = skiptowhite(arg);
if (*p != NUL) /* past "default" or group name */
{
- include_default = FALSE;
+ include_default = 0;
if (STRNCMP("default", arg, p - arg) == 0)
{
arg = skipwhite(p);
@@ -8985,7 +9010,7 @@
}
if (*p != NUL) /* past group name */
{
- include_link = FALSE;
+ include_link = 0;
if (arg[1] == 'i' && arg[0] == 'N')
highlight_list();
if (STRNCMP("link", arg, p - arg) == 0
@@ -9045,31 +9070,25 @@
expand_T *xp;
int idx;
{
- if (idx == highlight_ga.ga_len
#ifdef FEAT_CMDL_COMPL
- && include_link
-#endif
- )
- return (char_u *)"link";
- if (idx == highlight_ga.ga_len + 1
-#ifdef FEAT_CMDL_COMPL
- && include_link
-#endif
- )
- return (char_u *)"clear";
- if (idx == highlight_ga.ga_len + 2
-#ifdef FEAT_CMDL_COMPL
- && include_default
-#endif
- )
+ if (idx == highlight_ga.ga_len && include_none != 0)
+ return (char_u *)"none";
+ if (idx == highlight_ga.ga_len + include_none && include_default != 0)
return (char_u *)"default";
+ if (idx == highlight_ga.ga_len + include_none + include_default
+ && include_link != 0)
+ return (char_u *)"link";
+ if (idx == highlight_ga.ga_len + include_none + include_default + 1
+ && include_link != 0)
+ return (char_u *)"clear";
+#endif
if (idx < 0 || idx >= highlight_ga.ga_len)
return NULL;
return HL_TABLE()[idx].sg_name;
}
#endif
-#ifdef FEAT_GUI
+#if defined(FEAT_GUI) || defined(PROTO)
/*
* Free all the highlight group fonts.
* Used when quitting for systems which need it.
diff --git a/src/version.c b/src/version.c
index b4f505a..22467d3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 36,
+/**/
35,
/**/
34,