aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicm <nicm>2023-01-16 11:26:14 +0000
committernicm <nicm>2023-01-16 11:26:14 +0000
commiteb1f8d70a7d1fe4b0fe604d5a36fcbc2babef249 (patch)
tree9b0cf7683670bc89c2bc52ac1cf80d7830c09c55
parent483cc77c1cbc6898fef143c8100945139c14a92c (diff)
downloadrtmux-eb1f8d70a7d1fe4b0fe604d5a36fcbc2babef249.tar.gz
rtmux-eb1f8d70a7d1fe4b0fe604d5a36fcbc2babef249.tar.bz2
rtmux-eb1f8d70a7d1fe4b0fe604d5a36fcbc2babef249.zip
Mark keys sent by command and skip paste handling for them.
-rw-r--r--cmd-send-keys.c2
-rw-r--r--key-string.c2
-rw-r--r--server-client.c4
-rw-r--r--tmux.h11
4 files changed, 12 insertions, 7 deletions
diff --git a/cmd-send-keys.c b/cmd-send-keys.c
index a7c5ee10..ac99a6fd 100644
--- a/cmd-send-keys.c
+++ b/cmd-send-keys.c
@@ -74,7 +74,7 @@ cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after,
if (tc == NULL)
return (item);
event = xmalloc(sizeof *event);
- event->key = key;
+ event->key = key|KEYC_SENT;
memset(&event->m, 0, sizeof event->m);
if (server_client_handle_key(tc, event) == 0)
free(event);
diff --git a/key-string.c b/key-string.c
index 086c3ac4..699d460f 100644
--- a/key-string.c
+++ b/key-string.c
@@ -462,6 +462,8 @@ out:
strlcat(out, "B", sizeof out);
if (saved & KEYC_EXTENDED)
strlcat(out, "E", sizeof out);
+ if (saved & KEYC_SENT)
+ strlcat(out, "S", sizeof out);
strlcat(out, "]", sizeof out);
}
return (out);
diff --git a/server-client.c b/server-client.c
index cb48d001..f0d1d538 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1890,7 +1890,9 @@ server_client_key_callback(struct cmdq_item *item, void *data)
goto forward_key;
/* Treat everything as a regular key when pasting is detected. */
- if (!KEYC_IS_MOUSE(key) && server_client_assume_paste(s))
+ if (!KEYC_IS_MOUSE(key) &&
+ (~key & KEYC_SENT) &&
+ server_client_assume_paste(s))
goto forward_key;
/*
diff --git a/tmux.h b/tmux.h
index 4df99d01..718a067b 100644
--- a/tmux.h
+++ b/tmux.h
@@ -131,13 +131,14 @@ struct winlink;
#define KEYC_SHIFT 0x00400000000000ULL
/* Key flag bits. */
-#define KEYC_LITERAL 0x01000000000000ULL
-#define KEYC_KEYPAD 0x02000000000000ULL
-#define KEYC_CURSOR 0x04000000000000ULL
+#define KEYC_LITERAL 0x01000000000000ULL
+#define KEYC_KEYPAD 0x02000000000000ULL
+#define KEYC_CURSOR 0x04000000000000ULL
#define KEYC_IMPLIED_META 0x08000000000000ULL
#define KEYC_BUILD_MODIFIERS 0x10000000000000ULL
-#define KEYC_VI 0x20000000000000ULL
-#define KEYC_EXTENDED 0x40000000000000ULL
+#define KEYC_VI 0x20000000000000ULL
+#define KEYC_EXTENDED 0x40000000000000ULL
+#define KEYC_SENT 0x80000000000000ULL
/* Masks for key bits. */
#define KEYC_MASK_MODIFIERS 0x00f00000000000ULL