Ignore internal function keys if they have not got an entry in the key
authornicm <nicm@openbsd.org>
Fri, 23 Aug 2024 13:25:39 +0000 (13:25 +0000)
committernicm <nicm@openbsd.org>
Fri, 23 Aug 2024 13:25:39 +0000 (13:25 +0000)
table.

usr.bin/tmux/input-keys.c
usr.bin/tmux/key-string.c
usr.bin/tmux/tmux.h

index 348b098..d8dc2aa 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: input-keys.c,v 1.96 2024/08/21 04:55:57 nicm Exp $ */
+/* $OpenBSD: input-keys.c,v 1.97 2024/08/23 13:25:39 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -499,9 +499,8 @@ input_key_vt10x(struct bufferevent *bev, key_code key)
                return (0);
        }
 
-       onlykey = key & KEYC_MASK_KEY;
-
        /* Prevent TAB and RET from being swallowed by C0 remapping logic. */
+       onlykey = key & KEYC_MASK_KEY;
        if (onlykey == '\r' || onlykey == '\t')
                key &= ~KEYC_CTRL;
 
@@ -594,7 +593,7 @@ input_key(struct screen *s, struct bufferevent *bev, key_code key)
 
        /* Is this backtab? */
        if ((key & KEYC_MASK_KEY) == KEYC_BTAB) {
-               if (s->mode & EXTENDED_KEY_MODES) {
+               if ((s->mode & EXTENDED_KEY_MODES) != 0) {
                        /* When in xterm extended mode, remap into S-Tab. */
                        key = '\011' | (key & ~KEYC_MASK_KEY) | KEYC_SHIFT;
                } else {
@@ -651,6 +650,13 @@ input_key(struct screen *s, struct bufferevent *bev, key_code key)
                return (0);
        }
 
+       /* Ignore internal function key codes. */
+       if ((key >= KEYC_BASE && key < KEYC_BASE_END) ||
+           (key >= KEYC_USER && key < KEYC_USER_END)) {
+               log_debug("%s: ignoring key 0x%llx", __func__, key);
+               return (0);
+       }
+
        /*
         * No builtin key sequence; construct an extended key sequence
         * depending on the client mode.
index 856c974..3236008 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: key-string.c,v 1.74 2024/08/22 09:05:51 nicm Exp $ */
+/* $OpenBSD: key-string.c,v 1.75 2024/08/23 13:25:39 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -410,7 +410,7 @@ key_string_lookup_key(key_code key, int with_flags)
                s = "MouseMoveBorder";
                goto append;
        }
-       if (key >= KEYC_USER && key < KEYC_USER + KEYC_NUSER) {
+       if (key >= KEYC_USER && key < KEYC_USER_END) {
                snprintf(tmp, sizeof tmp, "User%u", (u_int)(key - KEYC_USER));
                strlcat(out, tmp, sizeof out);
                goto out;
index 7c6f7c7..2faaf53 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.1221 2024/08/21 04:17:09 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1222 2024/08/23 13:25:39 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -125,6 +125,7 @@ struct winlink;
  */
 #define KEYC_BASE            0x0000000010e000ULL
 #define KEYC_USER            0x0000000010f000ULL
+#define KEYC_USER_END       (KEYC_USER + KEYC_NUSER)
 
 /* Key modifier bits. */
 #define KEYC_META            0x00100000000000ULL
@@ -159,7 +160,7 @@ struct winlink;
         (((key) & KEYC_MASK_KEY) < KEYC_BASE || \
          ((key) & KEYC_MASK_KEY) >= KEYC_BASE_END) && \
         (((key) & KEYC_MASK_KEY) < KEYC_USER || \
-         ((key) & KEYC_MASK_KEY) >= KEYC_USER + KEYC_NUSER))
+         ((key) & KEYC_MASK_KEY) >= KEYC_USER_END))
 
 /* Multiple click timeout. */
 #define KEYC_CLICK_TIMEOUT 300