diff options
author | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2016-03-22 16:05:14 +0100 |
---|---|---|
committer | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2016-03-22 16:36:30 +0100 |
commit | 35d255fc8c2bc585bacbe59afb8cf9c6cc3cadc8 (patch) | |
tree | a83290c31aad8f0e15fc7aa28e7e396e984423f1 /src/fe-text | |
parent | 83bee9c6b73d01b749e3c8a56e0683569e6a1ae2 (diff) | |
download | irssi-35d255fc8c2bc585bacbe59afb8cf9c6cc3cadc8.zip |
Properly toggle bracketed paste mode on stop/cont
Fixes #449
Diffstat (limited to 'src/fe-text')
-rw-r--r-- | src/fe-text/term-terminfo.c | 8 | ||||
-rw-r--r-- | src/fe-text/terminfo-core.c | 23 | ||||
-rw-r--r-- | src/fe-text/terminfo-core.h | 3 |
3 files changed, 26 insertions, 8 deletions
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 60927f1a..086c8801 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; @@ -535,6 +543,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); } @@ -545,6 +556,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)); @@ -677,6 +691,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; |