]> granicus.if.org Git - vim/commitdiff
patch 8.0.1089: cannot get range count in user command v8.0.1089
authorBram Moolenaar <Bram@vim.org>
Sun, 10 Sep 2017 15:34:35 +0000 (17:34 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 10 Sep 2017 15:34:35 +0000 (17:34 +0200)
Problem:    Cannot get range count in user command.
Solution:   Add <range> argument.

runtime/doc/map.txt
src/ex_docmd.c
src/version.c

index 983fb2db4d490bcd38fa90f712be7c958b551778..f6bcde23774473f3dfb80fe0946d089b6ac8c695 100644 (file)
@@ -1415,6 +1415,8 @@ The valid escape sequences are
        <line1> The starting line of the command range.
                                                *<line2>*
        <line2> The final line of the command range.
+                                               *<range>*
+       <range> The number of items in the command range: 0, 1 or 2
                                                *<count>*
        <count> Any count supplied (as described for the '-range'
                and '-count' attributes).
index 0bcb7fec50c5eb090952dc00a78468c6628ceabf..33f544437e55dae930d6ae0e276abffcbd404fa2 100644 (file)
@@ -6331,7 +6331,8 @@ ex_command(exarg_T *eap)
     {
        ++p;
        end = skiptowhite(p);
-       if (uc_scan_attr(p, end - p, &argt, &def, &flags, &compl, &compl_arg, &addr_type_arg)
+       if (uc_scan_attr(p, end - p, &argt, &def, &flags, &compl,
+                                                   &compl_arg, &addr_type_arg)
                == FAIL)
            return;
        p = skipwhite(end);
@@ -6372,7 +6373,7 @@ ex_command(exarg_T *eap)
     }
     else
        uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
-                                                               addr_type_arg, eap->forceit);
+                                                 addr_type_arg, eap->forceit);
 }
 
 /*
@@ -6592,8 +6593,18 @@ uc_check_code(
     char_u     *p = code + 1;
     size_t     l = len - 2;
     int                quote = 0;
-    enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_MODS,
-       ct_REGISTER, ct_LT, ct_NONE } type = ct_NONE;
+    enum {
+       ct_ARGS,
+       ct_BANG,
+       ct_COUNT,
+       ct_LINE1,
+       ct_LINE2,
+       ct_RANGE,
+       ct_MODS,
+       ct_REGISTER,
+       ct_LT,
+       ct_NONE
+    } type = ct_NONE;
 
     if ((vim_strchr((char_u *)"qQfF", *p) != NULL) && p[1] == '-')
     {
@@ -6615,6 +6626,8 @@ uc_check_code(
        type = ct_LINE1;
     else if (STRNICMP(p, "line2>", l) == 0)
        type = ct_LINE2;
+    else if (STRNICMP(p, "range>", l) == 0)
+       type = ct_RANGE;
     else if (STRNICMP(p, "lt>", l) == 0)
        type = ct_LT;
     else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0)
@@ -6716,11 +6729,13 @@ uc_check_code(
 
     case ct_LINE1:
     case ct_LINE2:
+    case ct_RANGE:
     case ct_COUNT:
     {
        char num_buf[20];
        long num = (type == ct_LINE1) ? eap->line1 :
                   (type == ct_LINE2) ? eap->line2 :
+                  (type == ct_RANGE) ? eap->addr_count :
                   (eap->addr_count > 0) ? eap->line2 : cmd->uc_def;
        size_t num_len;
 
index c86b7dc29dfb6816172421b2fdb4465d866b2048..b10216f697889a6094194286b29f22dd5532c975 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1089,
 /**/
     1088,
 /**/