aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-04-30 12:31:16 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-04-30 12:31:16 -0700
commita8983b3aa2ba431f58466bb205add96de7284f4f (patch)
tree7149087bbd9c23f50ff0a14c0bf65d490fa63f1e /pw.c
parent768533744141f9570e1323c65751881e53d891a7 (diff)
downloadpw-a8983b3aa2ba431f58466bb205add96de7284f4f.tar.gz
pw-a8983b3aa2ba431f58466bb205add96de7284f4f.tar.bz2
pw-a8983b3aa2ba431f58466bb205add96de7284f4f.zip
Fix issues with the count prefix.
- ambiguity with 0 command. - reset to UINT_MAX under right conditions.
Diffstat (limited to 'pw.c')
-rw-r--r--pw.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pw.c b/pw.c
index 7a22523..a949617 100644
--- a/pw.c
+++ b/pw.c
@@ -881,10 +881,6 @@ int main(int argc, char **argv)
stat |= stat_force;
}
break;
- case '0':
- hpos = 0;
- stat |= stat_force;
- break;
case ' ':
if ((stat & stat_eof) == 0)
stat |= stat_susp;
@@ -927,6 +923,13 @@ int main(int argc, char **argv)
snapshot = resizebuf(snapshot, maxlines, maxlines + 1);
}
break;
+ case '0':
+ if (cmdcount == UINT_MAX) {
+ hpos = 0;
+ stat |= stat_force;
+ break;
+ }
+ // fallthrough
default:
if (isdigit(ch)) {
if (cmdcount == UINT_MAX)
@@ -934,6 +937,8 @@ int main(int argc, char **argv)
cmdcount = (cmdcount * 10 + (ch - '0')) % 1000;
}
}
+ if (kbd_state == kbd_cmd && !isdigit(ch))
+ cmdcount = UINT_MAX;
break;
case kbd_esc:
if (ch == '[') {
@@ -1057,7 +1062,7 @@ int main(int argc, char **argv)
if (len == 1) {
kbd_state = kbd_cmd;
curcmd = 0;
- cmdcount = UINT_MAX;
+ // cmdcount deliberately not reset to UNIT_MAX
} else {
cmdbuf[--len] = 0;
}