diff options
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; } |