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:
parent
9d3cfe1069
commit
4b1c60b2ec
@ -102,6 +102,17 @@ static GSourceFuncs sigcont_funcs = {
|
||||
.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)
|
||||
{
|
||||
struct sigaction act;
|
||||
@ -140,7 +151,7 @@ int term_init(void)
|
||||
|
||||
term_set_input_type(TERM_TYPE_8BIT);
|
||||
term_common_init();
|
||||
atexit(term_deinit);
|
||||
atexit(term_atexit);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user