diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-04-30 11:04:02 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-04-30 11:04:02 -0700 |
commit | 05be2ff6723ed696479737050d9654c97e7f8818 (patch) | |
tree | 5106024a06a75a1b7086e7130aedcae9d38ee740 /pw.c | |
parent | b69d951f1bd7ad98a127dec4d74175403dc26ffc (diff) | |
download | pw-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.c | 31 |
1 files changed, 24 insertions, 7 deletions
@@ -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; } |