1
0
mirror of https://github.com/irssi/irssi.git synced 2024-11-03 04:27:19 -05:00

term-terminfo: Avoid switching out of alt screen on unexpected exits

Perl sucks and kills the whole process when there's a version mismatch
in Perl_xs_handshake(). Our atexit handler catches the exit and
deinitializes the terminal, removing the error.

This commit uses the 'quitting' global variable which is set when irssi
is voluntarily quitting, and avoids sending TI_rmcup, which restores the
original screen and makes the error invisible.
This commit is contained in:
dequis 2017-06-17 13:47:13 -03:00
parent 9d3cfe1069
commit 4b1c60b2ec

View File

@ -102,6 +102,17 @@ static GSourceFuncs sigcont_funcs = {
.dispatch = sigcont_dispatch .dispatch = sigcont_dispatch
}; };
static void term_atexit(void)
{
if (!quitting && current_term && current_term->TI_rmcup) {
/* Unexpected exit, avoid switching out of alternate screen
to keep any on-screen errors (like noperl_die()'s) */
current_term->TI_rmcup = NULL;
}
term_deinit();
}
int term_init(void) int term_init(void)
{ {
struct sigaction act; struct sigaction act;
@ -140,7 +151,7 @@ int term_init(void)
term_set_input_type(TERM_TYPE_8BIT); term_set_input_type(TERM_TYPE_8BIT);
term_common_init(); term_common_init();
atexit(term_deinit); atexit(term_atexit);
return TRUE; return TRUE;
} }