diff --git a/src/contour/helper.h b/src/contour/helper.h index 75c884a709..2e567d0f2f 100644 --- a/src/contour/helper.h +++ b/src/contour/helper.h @@ -103,7 +103,7 @@ constexpr inline vtbackend::Modifiers makeModifiers(Qt::KeyboardModifiers qtModi Modifiers modifiers {}; - if (qtModifiers & Qt::KeypadModifier) + if (qtModifiers & Qt::GroupSwitchModifier) modifiers |= Modifier::NumLock; if (qtModifiers & Qt::AltModifier) diff --git a/src/vtbackend/InputGenerator.cpp b/src/vtbackend/InputGenerator.cpp index 5d157afb25..420e579c5d 100644 --- a/src/vtbackend/InputGenerator.cpp +++ b/src/vtbackend/InputGenerator.cpp @@ -154,13 +154,14 @@ std::string StandardKeyboardInputGenerator::selectNumpad(Modifiers modifiers, if (modifiers.contains(Modifier::NumLock)) return select(modifiers, { .std = mapping.std, .mods = mapping.std, .appKeypad = mapping.std }); - return select(modifiers, mapping); + return select(modifiers.without(Modifier::NumLock), mapping); } std::string StandardKeyboardInputGenerator::select(Modifiers modifiers, FunctionKeyMapping mapping) const { - if (modifiers && !mapping.mods.empty()) - return crispy::replace(mapping.mods, "{}"sv, makeVirtualTerminalParam(modifiers)); + if (modifiers.without(Modifier::NumLock) && !mapping.mods.empty()) + return crispy::replace( + mapping.mods, "{}"sv, makeVirtualTerminalParam(modifiers.without(Modifier::NumLock))); auto const prefix = modifiers.contains(Modifier::Alt) ? "\033" : ""s; diff --git a/src/vtbackend/InputGenerator.h b/src/vtbackend/InputGenerator.h index 4ceebc02b8..223dbafa3f 100644 --- a/src/vtbackend/InputGenerator.h +++ b/src/vtbackend/InputGenerator.h @@ -279,11 +279,16 @@ class StandardKeyboardInputGenerator: public KeyboardInputGenerator } protected: + /// Maps a function key to its corresponding VT sequences based on different modes and modifiers. struct FunctionKeyMapping { + /// Standard VT sequence. std::string_view std {}; + /// VT sequence when modifiers are pressed. std::string_view mods {}; + /// VT sequence when Application Cursor Keys mode is enabled. std::string_view appCursor {}; + /// VT sequence when Application Keypad mode is enabled. std::string_view appKeypad {}; };