From 9e79a80288b619dd2fc2dc46d766a428a448d1b9 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 10 Jun 2021 07:21:09 +0000 Subject: [PATCH] Add another couple of keys needed for extended keys, GitHub issue 2658. Handle modifier 9 as Meta, GitHub issue 2647. --- usr.bin/tmux/key-bindings.c | 8 +++++++- usr.bin/tmux/key-string.c | 12 ++++++++---- usr.bin/tmux/tty-keys.c | 13 ++++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/usr.bin/tmux/key-bindings.c b/usr.bin/tmux/key-bindings.c index fd4ff48449d..38d503f6a75 100644 --- a/usr.bin/tmux/key-bindings.c +++ b/usr.bin/tmux/key-bindings.c @@ -1,4 +1,4 @@ -/* $OpenBSD: key-bindings.c,v 1.132 2020/10/13 10:15:23 nicm Exp $ */ +/* $OpenBSD: key-bindings.c,v 1.133 2021/06/10 07:21:09 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -215,6 +215,9 @@ key_bindings_add(const char *name, key_code key, const char *note, int repeat, if (repeat) bd->flags |= KEY_BINDING_REPEAT; bd->cmdlist = cmdlist; + + log_debug("%s: %#llx %s = %s", __func__, bd->key, + key_string_lookup_key(bd->key, 1), cmd_list_print(bd->cmdlist, 0)); } void @@ -231,6 +234,9 @@ key_bindings_remove(const char *name, key_code key) if (bd == NULL) return; + log_debug("%s: %#llx %s", __func__, bd->key, + key_string_lookup_key(bd->key, 1)); + RB_REMOVE(key_bindings, &table->key_bindings, bd); key_bindings_free(bd); diff --git a/usr.bin/tmux/key-string.c b/usr.bin/tmux/key-string.c index 6404504b096..017b8290b18 100644 --- a/usr.bin/tmux/key-string.c +++ b/usr.bin/tmux/key-string.c @@ -1,4 +1,4 @@ -/* $OpenBSD: key-string.c,v 1.65 2021/04/07 15:46:12 nicm Exp $ */ +/* $OpenBSD: key-string.c,v 1.66 2021/06/10 07:21:09 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -164,7 +164,7 @@ key_string_get_modifiers(const char **string) key_code key_string_lookup_string(const char *string) { - static const char *other = "!#()+,-.0123456789:;<=>'\r\t\177"; + static const char *other = "!#()+,-.0123456789:;<=>'\r\t\177`/"; key_code key, modifiers; u_int u, i; struct utf8_data ud, *udp; @@ -238,8 +238,12 @@ key_string_lookup_string(const char *string) } /* Convert the standard control keys. */ - if (key < KEYC_BASE && (modifiers & KEYC_CTRL) && - strchr(other, key) == NULL) { + if (key < KEYC_BASE && + (modifiers & KEYC_CTRL) && + strchr(other, key) == NULL && + key != 9 && + key != 13 && + key != 27) { if (key >= 97 && key <= 122) key -= 96; else if (key >= 64 && key <= 95) diff --git a/usr.bin/tmux/tty-keys.c b/usr.bin/tmux/tty-keys.c index 14adc1cc821..ed0041e4625 100644 --- a/usr.bin/tmux/tty-keys.c +++ b/usr.bin/tmux/tty-keys.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty-keys.c,v 1.146 2021/04/13 12:26:34 nicm Exp $ */ +/* $OpenBSD: tty-keys.c,v 1.147 2021/06/10 07:21:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -252,7 +252,8 @@ static const key_code tty_default_xterm_modifiers[] = { KEYC_CTRL, KEYC_SHIFT|KEYC_CTRL, KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL, - KEYC_SHIFT|KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL + KEYC_SHIFT|KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL, + KEYC_META|KEYC_IMPLIED_META }; /* @@ -944,6 +945,9 @@ tty_keys_extended_key(struct tty *tty, const char *buf, size_t len, case 8: nkey |= (KEYC_SHIFT|KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL); break; + case 9: + nkey |= (KEYC_META|KEYC_IMPLIED_META); + break; default: *key = KEYC_NONE; break; @@ -955,7 +959,10 @@ tty_keys_extended_key(struct tty *tty, const char *buf, size_t len, */ if (nkey & KEYC_CTRL) { onlykey = (nkey & KEYC_MASK_KEY); - if (onlykey < 32 && onlykey != 9) + if (onlykey < 32 && + onlykey != 9 && + onlykey != 13 && + onlykey != 27) /* nothing */; else if (onlykey >= 97 && onlykey <= 122) onlykey -= 96; -- 2.20.1