]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.054 v7.3.054
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Nov 2010 18:00:01 +0000 (19:00 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Nov 2010 18:00:01 +0000 (19:00 +0100)
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.

src/ex_docmd.c
src/version.c

index fe1bfe74970654b36cc413b1de8d3f93dedca677..1bb92cd82899ebdb658da9fc7a574a53932a523a 100644 (file)
@@ -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);
 }
 
index ec2f91b95d6cd220ea5b23d18445eadafde4f86d..ab330b5ef91110d2eedb428cce925e138c25dd96 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    54,
 /**/
     53,
 /**/