aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicm <nicm>2022-02-15 13:11:29 +0000
committernicm <nicm>2022-02-15 13:11:29 +0000
commit5076beb009f761999a3b218a1a8d7cbfbc80ee03 (patch)
tree08d2be0358730560a718ddec138a405fe8cfd297
parentf85208602ddd43ba55f29beae8d7a05cbfedefc1 (diff)
downloadrtmux-5076beb009f761999a3b218a1a8d7cbfbc80ee03.tar.gz
rtmux-5076beb009f761999a3b218a1a8d7cbfbc80ee03.tar.bz2
rtmux-5076beb009f761999a3b218a1a8d7cbfbc80ee03.zip
Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by default.
-rw-r--r--input.c6
-rw-r--r--options-table.c20
-rw-r--r--tmux.17
3 files changed, 26 insertions, 7 deletions
diff --git a/input.c b/input.c
index 16f31ad7..5adc694d 100644
--- a/input.c
+++ b/input.c
@@ -2235,15 +2235,19 @@ input_enter_dcs(struct input_ctx *ictx)
static int
input_dcs_dispatch(struct input_ctx *ictx)
{
+ struct window_pane *wp = ictx->wp;
struct screen_write_ctx *sctx = &ictx->ctx;
u_char *buf = ictx->input_buf;
size_t len = ictx->input_len;
const char prefix[] = "tmux;";
const u_int prefixlen = (sizeof prefix) - 1;
+ if (wp == NULL)
+ return (0);
if (ictx->flags & INPUT_DISCARD)
return (0);
-
+ if (!options_get_number(ictx->wp->options, "allow-passthrough"))
+ return (0);
log_debug("%s: \"%s\"", __func__, buf);
if (len >= prefixlen && strncmp(buf, prefix, prefixlen) == 0)
diff --git a/options-table.c b/options-table.c
index 5cbec546..62d37c39 100644
--- a/options-table.c
+++ b/options-table.c
@@ -302,7 +302,7 @@ const struct options_table_entry options_table[] = {
.choices = options_table_extended_keys_list,
.default_num = 0,
.text = "Whether to request extended key sequences from terminals "
- "that support it."
+ "that support it."
},
{ .name = "focus-events",
@@ -801,6 +801,14 @@ const struct options_table_entry options_table[] = {
"linked to ('off')."
},
+ { .name = "allow-passthrough",
+ .type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
+ .default_num = 0,
+ .text = "Whether applications are allowed to use the escape sequence "
+ "to bypass tmux."
+ },
+
{ .name = "allow-rename",
.type = OPTIONS_TABLE_FLAG,
.scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
@@ -989,7 +997,7 @@ const struct options_table_entry options_table[] = {
.choices = options_table_pane_border_lines_list,
.default_num = PANE_LINES_SINGLE,
.text = "Type of characters used to draw pane border lines. Some of "
- "these are only supported on terminals with UTF-8 support."
+ "these are only supported on terminals with UTF-8 support."
},
{ .name = "pane-border-status",
@@ -1041,7 +1049,7 @@ const struct options_table_entry options_table[] = {
.choices = options_table_popup_border_lines_list,
.default_num = BOX_LINES_SINGLE,
.text = "Type of characters used to draw popup border lines. Some of "
- "these are only supported on terminals with UTF-8 support."
+ "these are only supported on terminals with UTF-8 support."
},
{ .name = "remain-on-exit",
@@ -1171,7 +1179,7 @@ const struct options_table_entry options_table[] = {
.scope = OPTIONS_TABLE_WINDOW,
.default_num = 1,
.text = "Whether xterm-style function key sequences should be sent. "
- "This option is no longer used."
+ "This option is no longer used."
},
/* Hook options. */
@@ -1219,8 +1227,8 @@ const struct options_table_entry options_table[] = {
OPTIONS_TABLE_HOOK("client-active", ""),
OPTIONS_TABLE_HOOK("client-attached", ""),
OPTIONS_TABLE_HOOK("client-detached", ""),
- OPTIONS_TABLE_HOOK("client-focus-in", ""),
- OPTIONS_TABLE_HOOK("client-focus-out", ""),
+ OPTIONS_TABLE_HOOK("client-focus-in", ""),
+ OPTIONS_TABLE_HOOK("client-focus-out", ""),
OPTIONS_TABLE_HOOK("client-resized", ""),
OPTIONS_TABLE_HOOK("client-session-changed", ""),
OPTIONS_TABLE_PANE_HOOK("pane-died", ""),
diff --git a/tmux.1 b/tmux.1
index 255f10a9..c9c9f221 100644
--- a/tmux.1
+++ b/tmux.1
@@ -4403,6 +4403,13 @@ The default is on.
Available pane options are:
.Pp
.Bl -tag -width Ds -compact
+.It Xo Ic allow-passthrough
+.Op Ic on | off
+.Xc
+Allow programs in the pane to bypass
+.Nm
+using a terminal escape sequence (\eePtmux;...\ee\e\e).
+.Pp
.It Xo Ic allow-rename
.Op Ic on | off
.Xc