diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 21:16:41 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 21:16:41 -0700 |
commit | b11c4d66002e5338c6e210fb31a7e19eef649d21 (patch) | |
tree | cf2a91110789031e2cb12b126dd963032d5a4e12 /pw.c | |
parent | bdb1bb5e9be601e096a5c83d4ba56e6cf7821360 (diff) | |
download | pw-b11c4d66002e5338c6e210fb31a7e19eef649d21.tar.gz pw-b11c4d66002e5338c6e210fb31a7e19eef649d21.tar.bz2 pw-b11c4d66002e5338c6e210fb31a7e19eef649d21.zip |
Implement . (period) command for repeating commands.
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: { |