diff options
Diffstat (limited to 'pw.c')
-rw-r--r-- | pw.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -243,6 +243,7 @@ static void usage(void) "-l realnum long update interval (s)\n" "-n integer display size (# of lines)\n" "-d do not quit on end-of-input\n" + "-q integer Require this many repetitions of q to quit\n" "-E treat regular expressions as extended\n" "-B treat regular expressions as basic (default)\n\n" "-g [!]pattern add pattern to grep stack; ! inverts.\n\n" @@ -702,6 +703,7 @@ int main(int argc, char **argv) kbd_colon, kbd_result, kbd_trig }; int auto_quit = 1; + int quit_count = 1, quit_countdown = quit_count; int exit_status = EXIT_FAILURE; char cmdbuf[cmdsize], *curcmd = 0, *savedcmd = 0; #ifdef SIGWINCH @@ -726,7 +728,7 @@ int main(int argc, char **argv) } } - while ((opt = getopt(argc, argv, "n:i:l:dEBg:")) != -1) { + while ((opt = getopt(argc, argv, "n:i:l:dEBg:q:")) != -1) { switch (opt) { case 'n': { @@ -756,6 +758,15 @@ int main(int argc, char **argv) case 'd': auto_quit = 0; break; + case 'q': + { + char *err; + if ((quit_countdown = quit_count = getzp(optarg, &err)) < 0) { + error("-%c option: %s\n", opt, err); + return EXIT_FAILURE; + } + break; + } case 'E': regex_flags = REG_EXTENDED; break; @@ -1044,9 +1055,17 @@ int main(int argc, char **argv) curcmd = 0; // fallthrough case kbd_cmd: + if (ch != 'q' && ch != 3) + quit_countdown = quit_count; switch (ch) { case 'q': case 3: - kbd_state = kbd_exit; + if (--quit_countdown == 0) { + kbd_state = kbd_exit; + } else { + sprintf(cmdbuf, "%d more to quit", quit_countdown); + curcmd = cmdbuf; + kbd_state = kbd_result; + } break; case 'h': if (hpos >= 8) { |