From 6572005d3d8071dc7faa1637986ed81692203e13 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Tue, 22 Mar 2016 22:54:43 +0100 Subject: [PATCH] Merge pull request #458 from ailin-nemui/fix_449 Properly toggle bracketed paste mode on stop/cont --- src/common.h | 2 +- src/fe-text/term-terminfo.c | 8 -------- src/fe-text/terminfo-core.c | 23 +++++++++++++++++++++++ src/fe-text/terminfo-core.h | 3 +++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/common.h b/src/common.h index 966e28d0..729049ab 100644 --- a/src/common.h +++ b/src/common.h @@ -6,7 +6,7 @@ #define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */ #define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */ -#define IRSSI_ABI_VERSION 1 +#define IRSSI_ABI_VERSION 2 #define DEFAULT_SERVER_ADD_PORT 6667 diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c index 3582b9e4..27be904e 100644 --- a/src/fe-text/term-terminfo.c +++ b/src/fe-text/term-terminfo.c @@ -710,11 +710,3 @@ void term_gets(GArray *buffer, int *line_count) } } } - -void term_set_bracketed_paste_mode(int enable) -{ - if (enable) - tputs("\e[?2004h", 0, term_putchar); - else - tputs("\e[?2004l", 0, term_putchar); -} diff --git a/src/fe-text/terminfo-core.c b/src/fe-text/terminfo-core.c index 4db68cc7..aa833abf 100644 --- a/src/fe-text/terminfo-core.c +++ b/src/fe-text/terminfo-core.c @@ -395,6 +395,14 @@ static void _ignore_parm(TERM_REC *term, int param) { } +static void term_dec_set_bracketed_paste_mode(int enable) +{ + if (enable) + tputs("\e[?2004h", 0, term_putchar); + else + tputs("\e[?2004l", 0, term_putchar); +} + static void term_fill_capabilities(TERM_REC *term) { int i, ival; @@ -538,6 +546,9 @@ void terminfo_cont(TERM_REC *term) if (term->TI_smkx) tput(tparm(term->TI_smkx)); + if (term->bracketed_paste_enabled) + term_dec_set_bracketed_paste_mode(TRUE); + terminfo_input_init(term); } @@ -548,6 +559,9 @@ void terminfo_stop(TERM_REC *term) /* move cursor to bottom of the screen */ terminfo_move(0, term->height-1); + if (term->bracketed_paste_enabled) + term_dec_set_bracketed_paste_mode(FALSE); + /* stop cup-mode */ if (term->TI_rmcup) tput(tparm(term->TI_rmcup)); @@ -681,6 +695,15 @@ static int term_setup(TERM_REC *term) return 1; } +void term_set_bracketed_paste_mode(int enable) +{ + if (current_term->bracketed_paste_enabled == enable) + return; + + current_term->bracketed_paste_enabled = enable; + term_dec_set_bracketed_paste_mode(enable); +} + TERM_REC *terminfo_core_init(FILE *in, FILE *out) { TERM_REC *old_term, *term; diff --git a/src/fe-text/terminfo-core.h b/src/fe-text/terminfo-core.h index 21398791..0ef280a1 100644 --- a/src/fe-text/terminfo-core.h +++ b/src/fe-text/terminfo-core.h @@ -92,6 +92,9 @@ struct _TERM_REC { /* Keyboard-transmit mode */ const char *TI_smkx; const char *TI_rmkx; + + /* Terminal mode states */ + int bracketed_paste_enabled; }; extern TERM_REC *current_term;