From 8e833606c1b9ec9395caaec8678f59d62f1a3119 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 1 Jul 2017 13:09:31 +0200 Subject: seq: parse_relnum: initial + in stop part of a message range selects relative to the start So, e.g 4:+5 is the same as 4:9 Closes: #44 [via git-merge-pr] --- seq.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'seq.c') diff --git a/seq.c b/seq.c index def14fe..37a8066 100644 --- a/seq.c +++ b/seq.c @@ -174,7 +174,7 @@ blaze822_seq_setcur(char *s) } static char * -parse_relnum(char *a, long cur, long last, long *out) +parse_relnum(char *a, long cur, long start, long last, long *out) { long base; char *b; @@ -194,6 +194,8 @@ parse_relnum(char *a, long cur, long last, long *out) base = cur; } else if (*a == '-') { base = last + 1; + } else if (*a == '+') { + base = start; } else { base = 0; } @@ -341,7 +343,7 @@ parse_range(char *map, char *a, long *start, long *stop, long cur, long lines) *stop = 1; while (*a && *a != ':' && *a != '=' && *a != '_' && *a != '^') { - char *b = parse_relnum(a, cur, lines, start); + char *b = parse_relnum(a, cur, 0, lines, start); if (a == b) return 0; a = b; @@ -360,7 +362,7 @@ parse_range(char *map, char *a, long *start, long *stop, long cur, long lines) if (!*a) { *stop = lines; } else { - char *b = parse_relnum(a, cur, lines, stop); + char *b = parse_relnum(a, cur, *start, lines, stop); if (a == b) return 0; } -- cgit 1.4.1