Skip to content

Commit 430bc3b

Browse files
[vtbackend] InputGenerator: Fixes NumLock key handling
Signed-off-by: Christian Parpart <christian@parpart.family>
1 parent f6ce54b commit 430bc3b

File tree

4 files changed

+31
-21
lines changed

4 files changed

+31
-21
lines changed

metainfo.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@
112112
<li>Fixes `CancelSelection` default binding with escape (#1710)</li>
113113
<li>Fixes `CreateTab` to sometimes spawn more than one tab (#1695)</li>
114114
<li>Fixes crash using Chinese IME (#1707)</li>
115-
<li>Enables customizing predefined color palette (#1763)</li>
115+
<li>Fixes NumLock key handling (#1713)</li>
116116
<li>Fixes handling of multiple windows and tabs (#1725)</li>
117+
<li>Enables customizing predefined color palette (#1763)</li>
117118
<li>Ensure inserting new tabs happens right next to the currently active tab (#1695)</li>
118119
<li>Allow glyphs to underflow if they are not bigger than the cell size (#1603)</li>
119120
<li>Adds `MoveTabToLeft` and `MoveTabToRight` actions to move tabs around (#1695)</li>

src/contour/helper.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,8 @@ constexpr inline vtbackend::Modifiers makeModifiers(Qt::KeyboardModifiers qtModi
103103

104104
Modifiers modifiers {};
105105

106-
// TODO: Can we safely enable this? Especially with respect to CSIu?
107-
// if (qtModifiers & Qt::KeypadModifier)
108-
// modifiers |= Modifier::NumLock;
106+
if (qtModifiers & Qt::KeypadModifier)
107+
modifiers |= Modifier::NumLock;
109108

110109
if (qtModifiers & Qt::AltModifier)
111110
modifiers |= Modifier::Alt;

src/vtbackend/InputGenerator.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,15 @@ bool StandardKeyboardInputGenerator::generateChar(char32_t characterEvent,
148148
return true;
149149
}
150150

151+
std::string StandardKeyboardInputGenerator::selectNumpad(Modifiers modifiers,
152+
FunctionKeyMapping mapping) const
153+
{
154+
if (modifiers.contains(Modifier::NumLock))
155+
return select(modifiers, { .std = mapping.std, .mods = mapping.std, .appKeypad = mapping.std });
156+
157+
return select(modifiers, mapping);
158+
}
159+
151160
std::string StandardKeyboardInputGenerator::select(Modifiers modifiers, FunctionKeyMapping mapping) const
152161
{
153162
if (modifiers && !mapping.mods.empty())
@@ -225,23 +234,23 @@ bool StandardKeyboardInputGenerator::generateKey(Key key, Modifiers modifiers, K
225234
case Key::PageDown: append(select(modifiers, { .std = CSI "6~", .mods = CSI "6;{}~", .appKeypad = CSI "6~" })); break;
226235
case Key::Insert: append(select(modifiers, { .std = CSI "2~", .mods = CSI "2;{}~" })); break;
227236
case Key::Delete: append(select(modifiers, { .std = CSI "3~", .mods = CSI "3;{}~" })); break;
228-
case Key::Numpad_Enter: append(select(modifiers, { .std = "\r", .appKeypad = SS3 "M" })); break;
229-
case Key::Numpad_Multiply: append(select(modifiers, { .std = "*", .appKeypad = SS3 "j" })); break;
230-
case Key::Numpad_Add: append(select(modifiers, { .std = "+", .appKeypad = SS3 "k" })); break;
231-
case Key::Numpad_Subtract: append(select(modifiers, { .std = "-", .appKeypad = SS3 "m" })); break;
232-
case Key::Numpad_Decimal: append(select(modifiers, { .std = ".", .appKeypad = CSI "3~" })); break;
233-
case Key::Numpad_Divide: append(select(modifiers, { .std = "/", .appKeypad = SS3 "o" })); break;
234-
case Key::Numpad_0: append(select(modifiers, { .std = "0", .appKeypad = CSI "2~" })); break;
235-
case Key::Numpad_1: append(select(modifiers, { .std = "1", .appKeypad = SS3 "F" })); break;
236-
case Key::Numpad_2: append(select(modifiers, { .std = "2", .appKeypad = CSI "B" })); break;
237-
case Key::Numpad_3: append(select(modifiers, { .std = "3", .appKeypad = CSI "6~" })); break;
238-
case Key::Numpad_4: append(select(modifiers, { .std = "4", .appKeypad = CSI "D" })); break;
239-
case Key::Numpad_5: append(select(modifiers, { .std = "5", .appKeypad = CSI "E" })); break;
240-
case Key::Numpad_6: append(select(modifiers, { .std = "6", .appKeypad = CSI "C" })); break;
241-
case Key::Numpad_7: append(select(modifiers, { .std = "7", .appKeypad = SS3 "H" })); break;
242-
case Key::Numpad_8: append(select(modifiers, { .std = "8", .appKeypad = CSI "A" })); break;
243-
case Key::Numpad_9: append(select(modifiers, { .std = "9", .appKeypad = CSI "5~" })); break;
244-
case Key::Numpad_Equal: append(select(modifiers, { .std = "=", .appKeypad = SS3 "X" })); break;
237+
case Key::Numpad_Enter: append(selectNumpad(modifiers, { .std = "\r", .appKeypad = SS3 "M" })); break;
238+
case Key::Numpad_Multiply: append(selectNumpad(modifiers, { .std = "*", .appKeypad = SS3 "j" })); break;
239+
case Key::Numpad_Add: append(selectNumpad(modifiers, { .std = "+", .appKeypad = SS3 "k" })); break;
240+
case Key::Numpad_Subtract: append(selectNumpad(modifiers, { .std = "-", .appKeypad = SS3 "m" })); break;
241+
case Key::Numpad_Decimal: append(selectNumpad(modifiers, { .std = ".", .appKeypad = CSI "3~" })); break;
242+
case Key::Numpad_Divide: append(selectNumpad(modifiers, { .std = "/", .appKeypad = SS3 "o" })); break;
243+
case Key::Numpad_0: append(selectNumpad(modifiers, { .std = "0", .appKeypad = CSI "2~" })); break;
244+
case Key::Numpad_1: append(selectNumpad(modifiers, { .std = "1", .appKeypad = SS3 "F" })); break;
245+
case Key::Numpad_2: append(selectNumpad(modifiers, { .std = "2", .appKeypad = CSI "B" })); break;
246+
case Key::Numpad_3: append(selectNumpad(modifiers, { .std = "3", .appKeypad = CSI "6~" })); break;
247+
case Key::Numpad_4: append(selectNumpad(modifiers, { .std = "4", .appKeypad = CSI "D" })); break;
248+
case Key::Numpad_5: append(selectNumpad(modifiers, { .std = "5", .appKeypad = CSI "E" })); break;
249+
case Key::Numpad_6: append(selectNumpad(modifiers, { .std = "6", .appKeypad = CSI "C" })); break;
250+
case Key::Numpad_7: append(selectNumpad(modifiers, { .std = "7", .appKeypad = SS3 "H" })); break;
251+
case Key::Numpad_8: append(selectNumpad(modifiers, { .std = "8", .appKeypad = CSI "A" })); break;
252+
case Key::Numpad_9: append(selectNumpad(modifiers, { .std = "9", .appKeypad = CSI "5~" })); break;
253+
case Key::Numpad_Equal: append(selectNumpad(modifiers, { .std = "=", .appKeypad = SS3 "X" })); break;
245254
// {{{ unsupported keys in legacy input protocol
246255
case Key::MediaPlay:
247256
case Key::MediaStop:

src/vtbackend/InputGenerator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ class StandardKeyboardInputGenerator: public KeyboardInputGenerator
287287
std::string_view appKeypad {};
288288
};
289289

290+
[[nodiscard]] std::string selectNumpad(Modifiers modifier, FunctionKeyMapping mapping) const;
290291
[[nodiscard]] std::string select(Modifiers modifier, FunctionKeyMapping mapping) const;
291292
void append(char ch) { _pendingSequence += ch; }
292293
void append(std::string_view sequence) { _pendingSequence += sequence; }

0 commit comments

Comments
 (0)