From bce9b3b33eadc6456fc40a3260450f446de95e70 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Tue, 2 Dec 2025 23:59:15 -0800 Subject: [PATCH] Ensure `k-prefix` mode exits after special key handling --- GUIInputHandler.cc | 11 +++++++++++ TerminalInputHandler.cc | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/GUIInputHandler.cc b/GUIInputHandler.cc index ee4597a..f4802cf 100644 --- a/GUIInputHandler.cc +++ b/GUIInputHandler.cc @@ -61,35 +61,46 @@ map_key(const SDL_Keycode key, } // Movement and basic keys + // These keys exit k-prefix mode if active (user pressed C-k then a special key). switch (key) { case SDLK_LEFT: + k_prefix = false; out = {true, CommandId::MoveLeft, "", 0}; return true; case SDLK_RIGHT: + k_prefix = false; out = {true, CommandId::MoveRight, "", 0}; return true; case SDLK_UP: + k_prefix = false; out = {true, CommandId::MoveUp, "", 0}; return true; case SDLK_DOWN: + k_prefix = false; out = {true, CommandId::MoveDown, "", 0}; return true; case SDLK_HOME: + k_prefix = false; out = {true, CommandId::MoveHome, "", 0}; return true; case SDLK_END: + k_prefix = false; out = {true, CommandId::MoveEnd, "", 0}; return true; case SDLK_PAGEUP: + k_prefix = false; out = {true, CommandId::PageUp, "", 0}; return true; case SDLK_PAGEDOWN: + k_prefix = false; out = {true, CommandId::PageDown, "", 0}; return true; case SDLK_DELETE: + k_prefix = false; out = {true, CommandId::DeleteChar, "", 0}; return true; case SDLK_BACKSPACE: + k_prefix = false; out = {true, CommandId::Backspace, "", 0}; return true; case SDLK_TAB: diff --git a/TerminalInputHandler.cc b/TerminalInputHandler.cc index f9ab82b..6d83da6 100644 --- a/TerminalInputHandler.cc +++ b/TerminalInputHandler.cc @@ -31,8 +31,10 @@ map_key_to_command(const int ch, MappedInput &out) { // Handle special keys from ncurses + // These keys exit k-prefix mode if active (user pressed C-k then a special key). switch (ch) { case KEY_MOUSE: { + k_prefix = false; MEVENT ev{}; if (getmouse(&ev) == OK) { // Mouse wheel → scroll viewport without moving cursor @@ -62,33 +64,43 @@ map_key_to_command(const int ch, return true; } case KEY_LEFT: + k_prefix = false; out = {true, CommandId::MoveLeft, "", 0}; return true; case KEY_RIGHT: + k_prefix = false; out = {true, CommandId::MoveRight, "", 0}; return true; case KEY_UP: + k_prefix = false; out = {true, CommandId::MoveUp, "", 0}; return true; case KEY_DOWN: + k_prefix = false; out = {true, CommandId::MoveDown, "", 0}; return true; case KEY_HOME: + k_prefix = false; out = {true, CommandId::MoveHome, "", 0}; return true; case KEY_END: + k_prefix = false; out = {true, CommandId::MoveEnd, "", 0}; return true; case KEY_PPAGE: + k_prefix = false; out = {true, CommandId::PageUp, "", 0}; return true; case KEY_NPAGE: + k_prefix = false; out = {true, CommandId::PageDown, "", 0}; return true; case KEY_DC: + k_prefix = false; out = {true, CommandId::DeleteChar, "", 0}; return true; case KEY_RESIZE: + k_prefix = false; out = {true, CommandId::Refresh, "", 0}; return true; default: