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)
This commit is contained in:
parent
022fed78f0
commit
ed320b7e75
@ -111,6 +111,17 @@ int show_counter = 1;
|
|||||||
*/
|
*/
|
||||||
int frame_count = 0;
|
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
|
* Environment to use for setjmp/longjmp
|
||||||
* when breaking out of options handler
|
* when breaking out of options handler
|
||||||
@ -146,7 +157,11 @@ int max_col = 50;
|
|||||||
* and exit the application.
|
* and exit the application.
|
||||||
*/
|
*/
|
||||||
void finish() {
|
void finish() {
|
||||||
|
if (clear_screen) {
|
||||||
printf("\033[?25h\033[0m\033[H\033[2J");
|
printf("\033[?25h\033[0m\033[H\033[2J");
|
||||||
|
} else {
|
||||||
|
printf("\033[0m\n");
|
||||||
|
}
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,13 +326,19 @@ int main(int argc, char ** argv) {
|
|||||||
|
|
||||||
/* Process arguments */
|
/* Process arguments */
|
||||||
int index, c;
|
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 (!c) {
|
||||||
if (long_opts[index].flag == 0) {
|
if (long_opts[index].flag == 0) {
|
||||||
c = long_opts[index].val;
|
c = long_opts[index].val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case 'e':
|
||||||
|
clear_screen = 0;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
set_title = 0;
|
||||||
|
break;
|
||||||
case 'i': /* Show introduction */
|
case 'i': /* Show introduction */
|
||||||
show_intro = 1;
|
show_intro = 1;
|
||||||
break;
|
break;
|
||||||
@ -654,12 +675,18 @@ int main(int argc, char ** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to set terminal title */
|
/* Attempt to set terminal title */
|
||||||
|
if (set_title) {
|
||||||
printf("\033kNyanyanyanyanyanyanya...\033\134");
|
printf("\033kNyanyanyanyanyanyanya...\033\134");
|
||||||
printf("\033]1;Nyanyanyanyanyanyanya...\007");
|
printf("\033]1;Nyanyanyanyanyanyanya...\007");
|
||||||
printf("\033]2;Nyanyanyanyanyanyanya...\007");
|
printf("\033]2;Nyanyanyanyanyanyanya...\007");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clear_screen) {
|
||||||
/* Clear the screen */
|
/* Clear the screen */
|
||||||
printf("\033[H\033[2J\033[?25l");
|
printf("\033[H\033[2J\033[?25l");
|
||||||
|
} else {
|
||||||
|
printf("\033[s");
|
||||||
|
}
|
||||||
|
|
||||||
if (show_intro) {
|
if (show_intro) {
|
||||||
/* Display the MOTD */
|
/* Display the MOTD */
|
||||||
@ -690,12 +717,18 @@ int main(int argc, char ** argv) {
|
|||||||
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
usleep(400000);
|
usleep(400000);
|
||||||
|
if (clear_screen) {
|
||||||
printf("\033[H"); /* Reset cursor */
|
printf("\033[H"); /* Reset cursor */
|
||||||
|
} else {
|
||||||
|
printf("\033[u");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clear_screen) {
|
||||||
/* Clear the screen again */
|
/* Clear the screen again */
|
||||||
printf("\033[H\033[2J\033[?25l");
|
printf("\033[H\033[2J\033[?25l");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Store the start time */
|
/* Store the start time */
|
||||||
time_t start, current;
|
time_t start, current;
|
||||||
@ -707,6 +740,12 @@ int main(int argc, char ** argv) {
|
|||||||
char last = 0; /* Last color index rendered */
|
char last = 0; /* Last color index rendered */
|
||||||
size_t y, x; /* x/y coordinates of what we're drawing */
|
size_t y, x; /* x/y coordinates of what we're drawing */
|
||||||
while (playing) {
|
while (playing) {
|
||||||
|
/* Reset cursor */
|
||||||
|
if (clear_screen) {
|
||||||
|
printf("\033[H");
|
||||||
|
} else {
|
||||||
|
printf("\033[u");
|
||||||
|
}
|
||||||
/* Render the frame */
|
/* Render the frame */
|
||||||
for (y = min_row; y < max_row; ++y) {
|
for (y = min_row; y < max_row; ++y) {
|
||||||
for (x = min_col; x < max_col; ++x) {
|
for (x = min_col; x < max_col; ++x) {
|
||||||
@ -765,8 +804,6 @@ int main(int argc, char ** argv) {
|
|||||||
/* Loop animation */
|
/* Loop animation */
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
/* Reset cursor */
|
|
||||||
printf("\033[H");
|
|
||||||
/* Wait */
|
/* Wait */
|
||||||
usleep(90000);
|
usleep(90000);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user