summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2021-06-10 07:24:10 +0000
committernicm <nicm>2021-06-10 07:24:10 +0000
commit64c276c23bd729c03c2a3ff00c6f9e6ac4c644c6 (patch)
tree7bbcf995a08bacc55c39bae16767684177fc7df5
parent1ee231956ca9d1436e101350f4246abc1f157224 (diff)
Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.
-rw-r--r--input.c2
-rw-r--r--options-table.c6
-rw-r--r--screen.c4
-rw-r--r--tmux.125
4 files changed, 29 insertions, 8 deletions
diff --git a/input.c b/input.c
index f6aeb027..b599f27d 100644
--- a/input.c
+++ b/input.c
@@ -1390,6 +1390,8 @@ input_csi_dispatch(struct input_ctx *ictx)
case INPUT_CSI_MODSET:
n = input_get(ictx, 0, 0, 0);
m = input_get(ictx, 1, 0, 0);
+ if (options_get_number(global_options, "extended-keys") == 2)
+ break;
if (n == 0 || (n == 4 && m == 0))
screen_write_mode_clear(sctx, MODE_KEXTENDED);
else if (n == 4 && (m == 1 || m == 2))
diff --git a/options-table.c b/options-table.c
index 8ea56918..4f4d9ff6 100644
--- a/options-table.c
+++ b/options-table.c
@@ -75,6 +75,9 @@ static const char *options_table_remain_on_exit_list[] = {
static const char *options_table_detach_on_destroy_list[] = {
"off", "on", "no-detached", NULL
};
+static const char *options_table_extended_keys_list[] = {
+ "off", "on", "always", NULL
+};
/* Status line format. */
#define OPTIONS_TABLE_STATUS_FORMAT1 \
@@ -267,8 +270,9 @@ const struct options_table_entry options_table[] = {
},
{ .name = "extended-keys",
- .type = OPTIONS_TABLE_FLAG,
+ .type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_SERVER,
+ .choices = options_table_extended_keys_list,
.default_num = 0,
.text = "Whether to request extended key sequences from terminals "
"that support it."
diff --git a/screen.c b/screen.c
index 97ccdeec..0b1047ab 100644
--- a/screen.c
+++ b/screen.c
@@ -101,7 +101,9 @@ screen_reinit(struct screen *s)
s->rupper = 0;
s->rlower = screen_size_y(s) - 1;
- s->mode = MODE_CURSOR | MODE_WRAP;
+ s->mode = MODE_CURSOR|MODE_WRAP;
+ if (options_get_number(global_options, "extended-keys") == 2)
+ s->mode |= MODE_KEXTENDED;
if (s->saved_grid != NULL)
screen_alternate_off(s, NULL, 0);
diff --git a/tmux.1 b/tmux.1
index f5689bfa..146c998f 100644
--- a/tmux.1
+++ b/tmux.1
@@ -3418,11 +3418,24 @@ sessions.
.Xc
If enabled, the server will exit when there are no attached clients.
.It Xo Ic extended-keys
-.Op Ic on | off
+.Op Ic on | off | always
.Xc
-When enabled, extended keys are requested from the terminal and if supported
-are recognised by
-.Nm .
+When
+.Ic on
+or
+.Ic always ,
+the escape sequence to enable extended keys is sent to the terminal, if
+.Nm
+knows that it is supported.
+.Nm
+always recognises extended keys itself.
+If this option is
+.Ic on ,
+.Nm
+will only forward extended keys to applications when they request them; if
+.Ic always ,
+.Nm
+will always forward the keys.
.It Xo Ic focus-events
.Op Ic on | off
.Xc
@@ -3501,8 +3514,8 @@ capabilities to be set instead,
is intended for classes of functionality supported in a standard way but not
reported by
.Xr terminfo 5 .
-Care must be taken only to configure this with features the terminal actually
-support.
+Care must be taken to configure this only with features the terminal actually
+supports.
.Pp
This is an array option where each entry is a colon-separated string made up
of a terminal type pattern (matched using