Fix C-k c handling.

This commit is contained in:
2025-12-08 15:28:45 -08:00
parent 65705e3354
commit a8dcfbec58
2 changed files with 30 additions and 28 deletions

View File

@@ -158,16 +158,17 @@ map_key(const SDL_Keycode key,
ascii_key = static_cast<int>(key); ascii_key = static_cast<int>(key);
} }
bool ctrl2 = (mod & KMOD_CTRL) != 0; bool ctrl2 = (mod & KMOD_CTRL) != 0;
// If user typed a literal 'C' (or '^') as a control qualifier, keep k-prefix active // If user typed a literal 'C' (uppercase) or '^' as a control qualifier, keep k-prefix active
if (ascii_key == 'C' || ascii_key == 'c' || ascii_key == '^') { // Do NOT treat lowercase 'c' as a qualifier; 'c' is a valid k-command (BufferClose).
k_ctrl_pending = true; if (ascii_key == 'C' || ascii_key == '^') {
// Keep waiting for the next suffix; show status and suppress ensuing TEXTINPUT k_ctrl_pending = true;
if (ed) // Keep waiting for the next suffix; show status and suppress ensuing TEXTINPUT
ed->SetStatus("C-k C _"); if (ed)
suppress_textinput_once = true; ed->SetStatus("C-k C _");
out.hasCommand = false; suppress_textinput_once = true;
return true; out.hasCommand = false;
} return true;
}
// Otherwise, consume the k-prefix now for the actual suffix // Otherwise, consume the k-prefix now for the actual suffix
k_prefix = false; k_prefix = false;
if (ascii_key != 0) { if (ascii_key != 0) {
@@ -472,16 +473,16 @@ ImGuiInputHandler::ProcessSDLEvent(const SDL_Event &e)
ascii_key = static_cast<int>(c0); ascii_key = static_cast<int>(c0);
} }
if (ascii_key != 0) { if (ascii_key != 0) {
// Qualifier via TEXTINPUT: 'C' or '^' // Qualifier via TEXTINPUT: uppercase 'C' or '^' only
if (ascii_key == 'C' || ascii_key == 'c' || ascii_key == '^') { if (ascii_key == 'C' || ascii_key == '^') {
k_ctrl_pending_ = true; k_ctrl_pending_ = true;
if (ed_) if (ed_)
ed_->SetStatus("C-k C _"); ed_->SetStatus("C-k C _");
// Keep k-prefix active; do not emit a command // Keep k-prefix active; do not emit a command
k_prefix_ = true; k_prefix_ = true;
produced = true; produced = true;
break; break;
} }
// Map via k-prefix table; do not pass Ctrl for TEXTINPUT case // Map via k-prefix table; do not pass Ctrl for TEXTINPUT case
CommandId id; CommandId id;
bool pass_ctrl = k_ctrl_pending_; bool pass_ctrl = k_ctrl_pending_;

View File

@@ -178,14 +178,15 @@ map_key_to_command(const int ch,
ctrl = true; ctrl = true;
ascii_key = 'a' + (ch - 1); ascii_key = 'a' + (ch - 1);
} }
// If user typed literal 'C'/'c' or '^' as a qualifier, keep k-prefix and set pending // If user typed literal 'C' or '^' as a qualifier, keep k-prefix and set pending
if (ascii_key == 'C' || ascii_key == 'c' || ascii_key == '^') { // Note: Do NOT treat lowercase 'c' as a qualifier, since 'c' is a valid C-k command (BufferClose).
k_ctrl_pending = true; if (ascii_key == 'C' || ascii_key == '^') {
if (ed) k_ctrl_pending = true;
ed->SetStatus("C-k C _"); if (ed)
out.hasCommand = false; ed->SetStatus("C-k C _");
return true; out.hasCommand = false;
} return true;
}
// For actual suffix, consume the k-prefix // For actual suffix, consume the k-prefix
k_prefix = false; k_prefix = false;
// Do NOT lowercase here; KLookupKCommand handles case-sensitive bindings // Do NOT lowercase here; KLookupKCommand handles case-sensitive bindings