From cb8e0e5fff751bfbe6dde742671d0ecde537886d Mon Sep 17 00:00:00 2001 From: Vebjorn Ljosa Date: Thu, 4 Sep 2025 18:54:14 -0400 Subject: [PATCH] Fix Shift+Arrow key mappings Map ESC [ 1 ; 2 A/B/C/D to instead of all mapping to . Add unit tests for direct CURTSIES_NAMES entries and get_key sequence resolution. --- curtsies/curtsieskeys.py | 6 +++--- tests/test_events.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/curtsies/curtsieskeys.py b/curtsies/curtsieskeys.py index 7fb87a0..e8a179e 100644 --- a/curtsies/curtsieskeys.py +++ b/curtsies/curtsieskeys.py @@ -129,9 +129,9 @@ b"\x1b[1;3H": '', # alt-home b"\x1b[1;3F": '', # alt-end b"\x1b[1;2C": '', - b"\x1b[1;2B": '', - b"\x1b[1;2D": '', - b"\x1b[1;2A": '', + b"\x1b[1;2B": '', + b"\x1b[1;2D": '', + b"\x1b[1;2A": '', b"\x1b[3;2~": '', b"\x1b[5;2~": '', b"\x1b[6;2~": '', diff --git a/tests/test_events.py b/tests/test_events.py index 146923b..522dce1 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -145,3 +145,35 @@ def test_simple(self): class TestPPEvent(unittest.TestCase): def test(self): self.assertEqual(events.pp_event("a"), "a") + + +class TestShiftArrowMappings(unittest.TestCase): + def test_curtsies_names(self): + self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2A"], "") + self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2B"], "") + self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2C"], "") + self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2D"], "") + + def test_get_key_sequences(self): + # Ensure get_key resolves complete Shift+Arrow sequences + seq_up = [b"\x1b", b"[", b"1", b";", b"2", b"A"] + seq_down = [b"\x1b", b"[", b"1", b";", b"2", b"B"] + seq_right = [b"\x1b", b"[", b"1", b";", b"2", b"C"] + seq_left = [b"\x1b", b"[", b"1", b";", b"2", b"D"] + + self.assertEqual( + [events.get_key(seq_up[:i], encoding="utf8") for i in range(1, len(seq_up) + 1)], + [None, None, None, None, None, ""] + ) + self.assertEqual( + [events.get_key(seq_down[:i], encoding="utf8") for i in range(1, len(seq_down) + 1)], + [None, None, None, None, None, ""] + ) + self.assertEqual( + [events.get_key(seq_right[:i], encoding="utf8") for i in range(1, len(seq_right) + 1)], + [None, None, None, None, None, ""] + ) + self.assertEqual( + [events.get_key(seq_left[:i], encoding="utf8") for i in range(1, len(seq_left) + 1)], + [None, None, None, None, None, ""] + )