Ensure k-prefix mode exits after special key handling
This commit is contained in:
@@ -61,35 +61,46 @@ map_key(const SDL_Keycode key,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Movement and basic keys
|
// Movement and basic keys
|
||||||
|
// These keys exit k-prefix mode if active (user pressed C-k then a special key).
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveLeft, "", 0};
|
out = {true, CommandId::MoveLeft, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveRight, "", 0};
|
out = {true, CommandId::MoveRight, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveUp, "", 0};
|
out = {true, CommandId::MoveUp, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveDown, "", 0};
|
out = {true, CommandId::MoveDown, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_HOME:
|
case SDLK_HOME:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveHome, "", 0};
|
out = {true, CommandId::MoveHome, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_END:
|
case SDLK_END:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveEnd, "", 0};
|
out = {true, CommandId::MoveEnd, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_PAGEUP:
|
case SDLK_PAGEUP:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::PageUp, "", 0};
|
out = {true, CommandId::PageUp, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_PAGEDOWN:
|
case SDLK_PAGEDOWN:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::PageDown, "", 0};
|
out = {true, CommandId::PageDown, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_DELETE:
|
case SDLK_DELETE:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::DeleteChar, "", 0};
|
out = {true, CommandId::DeleteChar, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_BACKSPACE:
|
case SDLK_BACKSPACE:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::Backspace, "", 0};
|
out = {true, CommandId::Backspace, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case SDLK_TAB:
|
case SDLK_TAB:
|
||||||
|
|||||||
@@ -31,8 +31,10 @@ map_key_to_command(const int ch,
|
|||||||
MappedInput &out)
|
MappedInput &out)
|
||||||
{
|
{
|
||||||
// Handle special keys from ncurses
|
// Handle special keys from ncurses
|
||||||
|
// These keys exit k-prefix mode if active (user pressed C-k then a special key).
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case KEY_MOUSE: {
|
case KEY_MOUSE: {
|
||||||
|
k_prefix = false;
|
||||||
MEVENT ev{};
|
MEVENT ev{};
|
||||||
if (getmouse(&ev) == OK) {
|
if (getmouse(&ev) == OK) {
|
||||||
// Mouse wheel → scroll viewport without moving cursor
|
// Mouse wheel → scroll viewport without moving cursor
|
||||||
@@ -62,33 +64,43 @@ map_key_to_command(const int ch,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveLeft, "", 0};
|
out = {true, CommandId::MoveLeft, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveRight, "", 0};
|
out = {true, CommandId::MoveRight, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveUp, "", 0};
|
out = {true, CommandId::MoveUp, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveDown, "", 0};
|
out = {true, CommandId::MoveDown, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveHome, "", 0};
|
out = {true, CommandId::MoveHome, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_END:
|
case KEY_END:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::MoveEnd, "", 0};
|
out = {true, CommandId::MoveEnd, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::PageUp, "", 0};
|
out = {true, CommandId::PageUp, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::PageDown, "", 0};
|
out = {true, CommandId::PageDown, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_DC:
|
case KEY_DC:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::DeleteChar, "", 0};
|
out = {true, CommandId::DeleteChar, "", 0};
|
||||||
return true;
|
return true;
|
||||||
case KEY_RESIZE:
|
case KEY_RESIZE:
|
||||||
|
k_prefix = false;
|
||||||
out = {true, CommandId::Refresh, "", 0};
|
out = {true, CommandId::Refresh, "", 0};
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user