From 4a926e489b8497ca1ed6f188aacfa0215b720371 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 Apr 2026 10:01:07 +0000 Subject: [PATCH] Make C-[ have the same bindings as Escape for terminals with extended keys where they are different, GitHub issue 5035 from Eric NICOLAS. --- key-bindings.c | 2 ++ menu.c | 1 + mode-tree.c | 1 + status.c | 3 +++ 4 files changed, 7 insertions(+) diff --git a/key-bindings.c b/key-bindings.c index 16e77f52..f61d372d 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -512,6 +512,7 @@ key_bindings_init(void) "bind -Tcopy-mode C-v { send -X page-down }", "bind -Tcopy-mode C-w { send -X copy-pipe-and-cancel }", "bind -Tcopy-mode Escape { send -X cancel }", + "bind -Tcopy-mode C-[ { send -X cancel }", "bind -Tcopy-mode Space { send -X page-down }", "bind -Tcopy-mode , { send -X jump-reverse }", "bind -Tcopy-mode \\; { send -X jump-again }", @@ -585,6 +586,7 @@ key_bindings_init(void) "bind -Tcopy-mode-vi C-v { send -X rectangle-toggle }", "bind -Tcopy-mode-vi C-y { send -X scroll-up }", "bind -Tcopy-mode-vi Escape { send -X clear-selection }", + "bind -Tcopy-mode-vi C-[ { send -X clear-selection }", "bind -Tcopy-mode-vi Space { send -X begin-selection }", "bind -Tcopy-mode-vi '$' { send -X end-of-line }", "bind -Tcopy-mode-vi , { send -X jump-reverse }", diff --git a/menu.c b/menu.c index 9ae300ed..4f122831 100644 --- a/menu.c +++ b/menu.c @@ -471,6 +471,7 @@ menu_key_cb(struct client *c, void *data, struct key_event *event) case '\r': goto chosen; case '\033': /* Escape */ + case '['|KEYC_CTRL: case 'c'|KEYC_CTRL: case 'g'|KEYC_CTRL: case 'q': diff --git a/mode-tree.c b/mode-tree.c index 835f4219..bf0b163c 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -1276,6 +1276,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, switch (*key) { case 'q': case '\033': /* Escape */ + case '['|KEYC_CTRL: case 'g'|KEYC_CTRL: return (1); case KEYC_F1: diff --git a/status.c b/status.c index f1e74c91..fd5a0e3d 100644 --- a/status.c +++ b/status.c @@ -1053,6 +1053,7 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) *new_key = key; return (1); case '\033': /* Escape */ + case '['|KEYC_CTRL: c->prompt_mode = PROMPT_COMMAND; if (c->prompt_index != 0) c->prompt_index--; @@ -1085,6 +1086,7 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) c->flags |= CLIENT_REDRAWSTATUS; return (0); case '\033': /* Escape */ + case '['|KEYC_CTRL: return (0); } @@ -1652,6 +1654,7 @@ process_key: free(s); break; case '\033': /* Escape */ + case '['|KEYC_CTRL: case 'c'|KEYC_CTRL: case 'g'|KEYC_CTRL: if (c->prompt_inputcb(c, c->prompt_data, NULL, 1) == 0)