Adjust how Ctrl and Meta keys are sent to use standard representation if
authornicm <nicm@openbsd.org>
Mon, 21 Oct 2024 07:38:06 +0000 (07:38 +0000)
committernicm <nicm@openbsd.org>
Mon, 21 Oct 2024 07:38:06 +0000 (07:38 +0000)
available in mode 1, from Stanislav Kljuhhin, GitHub issue 4188.

usr.bin/tmux/input-keys.c

index fc6cf7f..85d59d3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: input-keys.c,v 1.101 2024/10/03 05:41:59 nicm Exp $ */
+/* $OpenBSD: input-keys.c,v 1.102 2024/10/21 07:38:06 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -543,12 +543,16 @@ input_key_mode1(struct bufferevent *bev, key_code key)
 
        log_debug("%s: key in %llx", __func__, key);
 
+       /* A regular or shifted key + Meta. */
+       if ((key & (KEYC_CTRL | KEYC_META)) == KEYC_META)
+               return (input_key_vt10x(bev, key));
+
        /*
         * As per
         * https://invisible-island.net/xterm/modified-keys-us-pc105.html.
         */
        onlykey = key & KEYC_MASK_KEY;
-       if ((key & (KEYC_META | KEYC_CTRL)) == KEYC_CTRL &&
+       if ((key & KEYC_CTRL) &&
            (onlykey == ' ' ||
             onlykey == '/' ||
             onlykey == '@' ||
@@ -557,13 +561,6 @@ input_key_mode1(struct bufferevent *bev, key_code key)
             (onlykey >= '@' && onlykey <= '~')))
                return (input_key_vt10x(bev, key));
 
-       /*
-        * A regular key + Meta. In the absence of a standard to back this, we
-        * mimic what iTerm 2 does.
-        */
-       if ((key & (KEYC_CTRL | KEYC_META)) == KEYC_META)
-               return (input_key_vt10x(bev, key));
-
        return (-1);
 }