diff options
author | Kevin Lange <kevin.lange@dakko.us> | 2012-04-01 15:16:05 -0500 |
---|---|---|
committer | Kevin Lange <kevin.lange@dakko.us> | 2012-04-01 15:16:05 -0500 |
commit | ed320b7e75163e5a27aecebcdc1872b9ea51c691 (patch) | |
tree | 53df2d1ded3e496e0350ea792b39710e74bf7053 | |
parent | 022fed78f0cea7cc4cbeed4d2d9f385956340949 (diff) | |
download | nyancat-ed320b7e75163e5a27aecebcdc1872b9ea51c691.tar.gz |
Add options to not clear display and not set title
`nyancat -esnf 1` will (quite nicely) display a single frame and
then terminate, in a matter that is perfect for generate MOTDs.
`nyancat -esnf 10` (for example) will run through the animation
(though it may not work perfectly, depending on the size of your
terminal and various other things)
-rw-r--r-- | src/nyancat.c | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/src/nyancat.c b/src/nyancat.c index 1a9362a..189da54 100644 --- a/src/nyancat.c +++ b/src/nyancat.c @@ -112,6 +112,17 @@ int show_counter = 1; int frame_count = 0; /* + * Clear the screen between frames (as opposed to reseting + * the cursor position) + */ +int clear_screen = 1; + +/* + * Force-set the terminal title. + */ +int set_title = 1; + +/* * Environment to use for setjmp/longjmp * when breaking out of options handler */ @@ -146,7 +157,11 @@ int max_col = 50; * and exit the application. */ void finish() { - printf("\033[?25h\033[0m\033[H\033[2J"); + if (clear_screen) { + printf("\033[?25h\033[0m\033[H\033[2J"); + } else { + printf("\033[0m\n"); + } exit(0); } @@ -311,13 +326,19 @@ int main(int argc, char ** argv) { /* Process arguments */ int index, c; - while ((c = getopt_long(argc, argv, "hitnf:r:R:c:C:W:H:", long_opts, &index)) != -1) { + while ((c = getopt_long(argc, argv, "eshitnf:r:R:c:C:W:H:", long_opts, &index)) != -1) { if (!c) { if (long_opts[index].flag == 0) { c = long_opts[index].val; } } switch (c) { + case 'e': + clear_screen = 0; + break; + case 's': + set_title = 0; + break; case 'i': /* Show introduction */ show_intro = 1; break; @@ -654,12 +675,18 @@ int main(int argc, char ** argv) { } /* Attempt to set terminal title */ - printf("\033kNyanyanyanyanyanyanya...\033\134"); - printf("\033]1;Nyanyanyanyanyanyanya...\007"); - printf("\033]2;Nyanyanyanyanyanyanya...\007"); + if (set_title) { + printf("\033kNyanyanyanyanyanyanya...\033\134"); + printf("\033]1;Nyanyanyanyanyanyanya...\007"); + printf("\033]2;Nyanyanyanyanyanyanya...\007"); + } - /* Clear the screen */ - printf("\033[H\033[2J\033[?25l"); + if (clear_screen) { + /* Clear the screen */ + printf("\033[H\033[2J\033[?25l"); + } else { + printf("\033[s"); + } if (show_intro) { /* Display the MOTD */ @@ -690,11 +717,17 @@ int main(int argc, char ** argv) { fflush(stdout); usleep(400000); - printf("\033[H"); /* Reset cursor */ + if (clear_screen) { + printf("\033[H"); /* Reset cursor */ + } else { + printf("\033[u"); + } } - /* Clear the screen again */ - printf("\033[H\033[2J\033[?25l"); + if (clear_screen) { + /* Clear the screen again */ + printf("\033[H\033[2J\033[?25l"); + } } /* Store the start time */ @@ -707,6 +740,12 @@ int main(int argc, char ** argv) { char last = 0; /* Last color index rendered */ size_t y, x; /* x/y coordinates of what we're drawing */ while (playing) { + /* Reset cursor */ + if (clear_screen) { + printf("\033[H"); + } else { + printf("\033[u"); + } /* Render the frame */ for (y = min_row; y < max_row; ++y) { for (x = min_col; x < max_col; ++x) { @@ -765,8 +804,6 @@ int main(int argc, char ** argv) { /* Loop animation */ i = 0; } - /* Reset cursor */ - printf("\033[H"); /* Wait */ usleep(90000); } |