summaryrefslogtreecommitdiffstats
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-09-10 17:34:35 +0200
committerBram Moolenaar <Bram@vim.org>2017-09-10 17:34:35 +0200
commitc168bd4bd3a9b856fc410fc4515dcca1d10d7461 (patch)
tree03b405fbbad695745400ace91e3d1a0ed8275364 /src/ex_docmd.c
parent414168d97fad45387a3d7dd16449d15b27079ad8 (diff)
patch 8.0.1089: cannot get range count in user commandv8.0.1089
Problem: Cannot get range count in user command. Solution: Add <range> argument.
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 0bcb7fec50..33f544437e 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -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;