diff options
author | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2016-03-22 16:54:34 +0100 |
---|---|---|
committer | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2016-03-22 23:58:34 +0100 |
commit | b9914abbf3a7fae6d15f26650a98d8e74aa1fa05 (patch) | |
tree | 9c2112d05cb2e56dde10e1fd00e134f79a09d31c /src | |
parent | b1ffd5f6472584aa3966746da9728c5afefcc4ce (diff) | |
download | irssi-b9914abbf3a7fae6d15f26650a98d8e74aa1fa05.zip |
Make use of terminal application keys configurable
adds a new setting term_appkey_mode which can enable or disable the use
of keyboard transmit (application keys) mode. Fixes #430
Diffstat (limited to 'src')
-rw-r--r-- | src/fe-text/gui-readline.c | 2 | ||||
-rw-r--r-- | src/fe-text/term.h | 1 | ||||
-rw-r--r-- | src/fe-text/terminfo-core.c | 23 | ||||
-rw-r--r-- | src/fe-text/terminfo-core.h | 1 |
4 files changed, 23 insertions, 4 deletions
diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index ff91f9e3..b93e5f0f 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -1060,6 +1060,7 @@ static void setup_changed(void) paste_join_multiline = settings_get_bool("paste_join_multiline"); paste_use_bracketed_mode = settings_get_bool("paste_use_bracketed_mode"); + term_set_appkey_mode(settings_get_bool("term_appkey_mode")); /* Enable the bracketed paste mode on demand */ term_set_bracketed_paste_mode(paste_use_bracketed_mode); } @@ -1082,6 +1083,7 @@ void gui_readline_init(void) g_get_current_time(&last_keypress); input_listen_init(STDIN_FILENO); + settings_add_bool("lookandfeel", "term_appkey_mode", TRUE); settings_add_str("history", "scroll_page_count", "/2"); settings_add_time("misc", "paste_detect_time", "5msecs"); settings_add_bool("misc", "paste_use_bracketed_mode", FALSE); diff --git a/src/fe-text/term.h b/src/fe-text/term.h index 5f0a799e..9b726d82 100644 --- a/src/fe-text/term.h +++ b/src/fe-text/term.h @@ -94,6 +94,7 @@ void term_refresh(TERM_WINDOW *window); void term_stop(void); +void term_set_appkey_mode(int enable); void term_set_bracketed_paste_mode(int enable); /* keyboard input handling */ diff --git a/src/fe-text/terminfo-core.c b/src/fe-text/terminfo-core.c index aa833abf..15b00081 100644 --- a/src/fe-text/terminfo-core.c +++ b/src/fe-text/terminfo-core.c @@ -395,6 +395,12 @@ static void _ignore_parm(TERM_REC *term, int param) { } +static void terminfo_set_appkey_mode(TERM_REC *term, int set) +{ + if (term->TI_smkx && term->TI_rmkx) + tput(tparm(set ? term->TI_smkx : term->TI_rmkx)); +} + static void term_dec_set_bracketed_paste_mode(int enable) { if (enable) @@ -543,8 +549,8 @@ void terminfo_cont(TERM_REC *term) if (term->TI_smcup) tput(tparm(term->TI_smcup)); - if (term->TI_smkx) - tput(tparm(term->TI_smkx)); + if (term->appkey_enabled) + terminfo_set_appkey_mode(term, TRUE); if (term->bracketed_paste_enabled) term_dec_set_bracketed_paste_mode(TRUE); @@ -566,8 +572,8 @@ void terminfo_stop(TERM_REC *term) if (term->TI_rmcup) tput(tparm(term->TI_rmcup)); - if (term->TI_rmkx) - tput(tparm(term->TI_rmkx)); + if (term->appkey_enabled) + terminfo_set_appkey_mode(term, FALSE); /* reset input settings */ terminfo_input_deinit(term); @@ -695,6 +701,15 @@ static int term_setup(TERM_REC *term) return 1; } +void term_set_appkey_mode(int enable) +{ + if (current_term->appkey_enabled == enable) + return; + + current_term->appkey_enabled = enable; + terminfo_set_appkey_mode(current_term, enable); +} + void term_set_bracketed_paste_mode(int enable) { if (current_term->bracketed_paste_enabled == enable) diff --git a/src/fe-text/terminfo-core.h b/src/fe-text/terminfo-core.h index 0ef280a1..1253fd9d 100644 --- a/src/fe-text/terminfo-core.h +++ b/src/fe-text/terminfo-core.h @@ -94,6 +94,7 @@ struct _TERM_REC { const char *TI_rmkx; /* Terminal mode states */ + int appkey_enabled; int bracketed_paste_enabled; }; |