summaryrefslogtreecommitdiff
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-11-10 19:00:01 +0100
committerBram Moolenaar <Bram@vim.org>2010-11-10 19:00:01 +0100
commita3e7b1f42b3d91de6f3e5f01d8067cf0079be56c (patch)
tree71cf8702f02bee07517b0ccf71daed47e381b089 /src/ex_docmd.c
parent2a8caa414ec4b704284e39523b457eacca06eea0 (diff)
downloadvim-git-a3e7b1f42b3d91de6f3e5f01d8067cf0079be56c.tar.gz
updated for version 7.3.054v7.3.054
Problem: Can define a user command for :Print, but it doesn't work. (Aaron Thoma) Solution: Let user command :Print overrule the builtin command (Christian Brabandt) Disallow :X and :Next as a user defined command.
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index fe1bfe749..1bb92cd82 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2871,8 +2871,10 @@ find_command(eap, full)
}
#ifdef FEAT_USR_CMDS
- /* Look for a user defined command as a last resort */
- if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
+ /* Look for a user defined command as a last resort. Let ":Print" be
+ * overruled by a user defined command. */
+ if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
+ && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
{
/* User defined commands may contain digits. */
while (ASCII_ISALNUM(*p))
@@ -5588,6 +5590,7 @@ ex_command(eap)
int compl = EXPAND_NOTHING;
char_u *compl_arg = NULL;
int has_attr = (eap->arg[0] == '-');
+ int name_len;
p = eap->arg;
@@ -5613,6 +5616,7 @@ ex_command(eap)
return;
}
end = p;
+ name_len = (int)(end - name);
/* If there is nothing after the name, and no attributes were specified,
* we are listing commands
@@ -5627,6 +5631,13 @@ ex_command(eap)
EMSG(_("E183: User defined commands must start with an uppercase letter"));
return;
}
+ else if ((name_len == 1 && *name == 'X')
+ || (name_len <= 4
+ && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
+ {
+ EMSG(_("E841: Reserved name, cannot be used for user defined command"));
+ return;
+ }
else
uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
eap->forceit);
@@ -9394,7 +9405,7 @@ ex_findpat(eap)
ex_ptag(eap)
exarg_T *eap;
{
- g_do_tagpreview = p_pvh;
+ g_do_tagpreview = p_pvh; /* will be reset to 0 in ex_tag_cmd() */
ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
}