Mark keys sent by command and skip paste handling for them.
authornicm <nicm@openbsd.org>
Mon, 16 Jan 2023 11:26:14 +0000 (11:26 +0000)
committernicm <nicm@openbsd.org>
Mon, 16 Jan 2023 11:26:14 +0000 (11:26 +0000)
usr.bin/tmux/cmd-send-keys.c
usr.bin/tmux/key-string.c
usr.bin/tmux/server-client.c
usr.bin/tmux/tmux.h

index c8ee97f..b49fd82 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-send-keys.c,v 1.74 2022/12/19 07:30:10 nicm Exp $ */
+/* $OpenBSD: cmd-send-keys.c,v 1.75 2023/01/16 11:26:14 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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);
index 25d4106..9b22d2e 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: key-string.c,v 1.70 2022/11/01 09:54:13 nicm Exp $ */
+/* $OpenBSD: key-string.c,v 1.71 2023/01/16 11:26:14 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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);
index 29f736c..e4ab945 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.398 2023/01/12 18:49:11 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.399 2023/01/16 11:26:14 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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;
 
        /*
index 86b1c24..b36df4a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.1191 2023/01/12 18:49:11 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1192 2023/01/16 11:26:14 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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