diff options
Diffstat (limited to 'pw.c')
-rw-r--r-- | pw.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -1036,7 +1036,7 @@ int main(int argc, char **argv) for (int kbd_state = kbd_cmd, kbd_prev = kbd_cmd, lasttime = -1, workbout = workmax, work = workbout, histpos = 0, - cmdcount = INT_MAX; + cmdcount = INT_MAX, prevcmd = 0, prevcount = 0; kbd_state != kbd_exit ;) { int force = 0, nfds = 2, pollms = poll_interval; @@ -1419,6 +1419,13 @@ int main(int argc, char **argv) pw.curcmd = pw.cmdbuf; kbd_state = kbd_result; break; + case '.': + if (prevcmd) { + ch = prevcmd; + cmdcount = prevcount; + goto fakecmd; + } + break; case '0': if (cmdcount == INT_MAX) { pw.hpos = 0; @@ -1431,10 +1438,19 @@ int main(int argc, char **argv) if (cmdcount == INT_MAX) cmdcount = 0; cmdcount = (cmdcount * 10 + (ch - '0')) % 1000; + break; } + ch = 0; + break; + } + if (!isdigit(ch)) { + if (ch && ch != '.') { + prevcmd = ch; + prevcount = cmdcount; + } + if (kbd_state == kbd_cmd) + cmdcount = INT_MAX; } - if (kbd_state == kbd_cmd && !isdigit(ch)) - cmdcount = INT_MAX; break; case kbd_esc: if (ch == '[') { @@ -1558,6 +1574,7 @@ int main(int argc, char **argv) kbd_state = kbd_cmd; pw.curcmd = 0; cmdcount = INT_MAX; + prevcmd = 0; break; case BS: case DEL: { |