aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-04-30 11:04:02 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-04-30 11:04:02 -0700
commit05be2ff6723ed696479737050d9654c97e7f8818 (patch)
tree5106024a06a75a1b7086e7130aedcae9d38ee740 /pw.c
parentb69d951f1bd7ad98a127dec4d74175403dc26ffc (diff)
downloadpw-05be2ff6723ed696479737050d9654c97e7f8818.tar.gz
pw-05be2ff6723ed696479737050d9654c97e7f8818.tar.bz2
pw-05be2ff6723ed696479737050d9654c97e7f8818.zip
Commands can have numeric prefix: + is guinea pig for this.
Diffstat (limited to 'pw.c')
-rw-r--r--pw.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/pw.c b/pw.c
index 1fe30cf..9960e5a 100644
--- a/pw.c
+++ b/pw.c
@@ -672,7 +672,8 @@ int main(int argc, char **argv)
for (unsigned stat = stat_dirty, hpos = 0,
kbd_state = kbd_cmd, kbd_prev = kbd_cmd, lasttime = ~0U,
- workbout = 1024, work = workbout, histpos = 0;
+ workbout = 1024, work = workbout, histpos = 0,
+ cmdcount = UINT_MAX;
kbd_state != kbd_exit ;)
{
int force = 0, nfds = 2, pollms = poll_interval;
@@ -880,14 +881,28 @@ int main(int argc, char **argv)
curcmd = cmdbuf;
break;
case '+':
- if (ws.ws_row && maxlines >= ws.ws_row - 1)
+ if (ws.ws_row && maxlines >= ws.ws_row - 1) {
break;
- circbuf = resizebuf(circbuf, maxlines, maxlines + 1);
- snapshot = resizebuf(snapshot, maxlines, maxlines + 1);
- maxlines++;
- if (maxlines == ws.ws_row - 1)
- maxed = 1;
+ } else {
+ unsigned count = (cmdcount == UINT_MAX) ? 1 : cmdcount;
+
+ maxlines += count;
+
+ if (maxlines >= ws.ws_row - 1) {
+ maxed = 1;
+ maxlines = ws.ws_row - 1;
+ }
+
+ circbuf = resizebuf(circbuf, maxlines, maxlines + 1);
+ snapshot = resizebuf(snapshot, maxlines, maxlines + 1);
+ }
break;
+ default:
+ if (isdigit(ch)) {
+ if (cmdcount == UINT_MAX)
+ cmdcount = 0;
+ cmdcount = (cmdcount * 10 + (ch - '0')) % 1000;
+ }
}
break;
case kbd_esc:
@@ -979,6 +994,7 @@ int main(int argc, char **argv)
}
kbd_state = kbd_cmd;
curcmd = 0;
+ cmdcount = UINT_MAX;
break;
case BS: case DEL:
{
@@ -986,6 +1002,7 @@ int main(int argc, char **argv)
if (len == 1) {
kbd_state = kbd_cmd;
curcmd = 0;
+ cmdcount = UINT_MAX;
} else {
cmdbuf[--len] = 0;
}