diff --git a/Userland/Libraries/LibVT/Terminal.cpp b/Userland/Libraries/LibVT/Terminal.cpp index ba81fbaba1..e06f65667b 100644 --- a/Userland/Libraries/LibVT/Terminal.cpp +++ b/Userland/Libraries/LibVT/Terminal.cpp @@ -943,12 +943,12 @@ void Terminal::DECDC(Parameters params) void Terminal::DECKPNM() { - dbgln("FIXME: implement setting the keypad to numeric mode"); + m_in_application_keypad_mode = false; } void Terminal::DECKPAM() { - dbgln("FIXME: implement setting the keypad to application mode"); + m_in_application_keypad_mode = true; } void Terminal::DSR(Parameters params) @@ -1327,6 +1327,7 @@ void Terminal::handle_key_press(KeyCode key, u32 code_point, u8 flags) bool ctrl = flags & Mod_Ctrl; bool alt = flags & Mod_Alt; bool shift = flags & Mod_Shift; + bool keypad = flags & Mod_Keypad; unsigned modifier_mask = int(shift) + (int(alt) << 1) + (int(ctrl) << 2); auto emit_final_with_modifier = [this, modifier_mask](char final) { @@ -1347,6 +1348,10 @@ void Terminal::handle_key_press(KeyCode key, u32 code_point, u8 flags) emit_string(builder.string_view()); }; + if (keypad && m_in_application_keypad_mode) { + return; + } + switch (key) { case KeyCode::Key_Up: emit_final_with_modifier('A'); diff --git a/Userland/Libraries/LibVT/Terminal.h b/Userland/Libraries/LibVT/Terminal.h index 5e7f0a5c4e..748c36907e 100644 --- a/Userland/Libraries/LibVT/Terminal.h +++ b/Userland/Libraries/LibVT/Terminal.h @@ -424,6 +424,7 @@ protected: bool m_swallow_current { false }; bool m_stomp { false }; + bool m_in_application_keypad_mode { false }; CursorShape m_cursor_shape { VT::CursorShape::Block }; CursorShape m_saved_cursor_shape { VT::CursorShape::Block };