Skip to content

Commit b2aaae8

Browse files
ljosasebastinas
authored andcommitted
Fix Shift+Arrow key mappings
Map ESC [ 1 ; 2 A/B/C/D to <Shift-UP/DOWN/RIGHT/LEFT> instead of all mapping to <Shift-RIGHT>. Add unit tests for direct CURTSIES_NAMES entries and get_key sequence resolution.
1 parent 96de944 commit b2aaae8

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

curtsies/curtsieskeys.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@
129129
b"\x1b[1;3H": '<Meta-HOME>', # alt-home
130130
b"\x1b[1;3F": '<Meta-END>', # alt-end
131131
b"\x1b[1;2C": '<Shift-RIGHT>',
132-
b"\x1b[1;2B": '<Shift-RIGHT>',
133-
b"\x1b[1;2D": '<Shift-RIGHT>',
134-
b"\x1b[1;2A": '<Shift-RIGHT>',
132+
b"\x1b[1;2B": '<Shift-DOWN>',
133+
b"\x1b[1;2D": '<Shift-LEFT>',
134+
b"\x1b[1;2A": '<Shift-UP>',
135135
b"\x1b[3;2~": '<Shift-DELETE>',
136136
b"\x1b[5;2~": '<Shift-PAGEUP>',
137137
b"\x1b[6;2~": '<Shift-PAGEDOWN>',

tests/test_events.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,35 @@ def test_simple(self):
145145
class TestPPEvent(unittest.TestCase):
146146
def test(self):
147147
self.assertEqual(events.pp_event("a"), "a")
148+
149+
150+
class TestShiftArrowMappings(unittest.TestCase):
151+
def test_curtsies_names(self):
152+
self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2A"], "<Shift-UP>")
153+
self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2B"], "<Shift-DOWN>")
154+
self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2C"], "<Shift-RIGHT>")
155+
self.assertEqual(events.CURTSIES_NAMES[b"\x1b[1;2D"], "<Shift-LEFT>")
156+
157+
def test_get_key_sequences(self):
158+
# Ensure get_key resolves complete Shift+Arrow sequences
159+
seq_up = [b"\x1b", b"[", b"1", b";", b"2", b"A"]
160+
seq_down = [b"\x1b", b"[", b"1", b";", b"2", b"B"]
161+
seq_right = [b"\x1b", b"[", b"1", b";", b"2", b"C"]
162+
seq_left = [b"\x1b", b"[", b"1", b";", b"2", b"D"]
163+
164+
self.assertEqual(
165+
[events.get_key(seq_up[:i], encoding="utf8") for i in range(1, len(seq_up) + 1)],
166+
[None, None, None, None, None, "<Shift-UP>"]
167+
)
168+
self.assertEqual(
169+
[events.get_key(seq_down[:i], encoding="utf8") for i in range(1, len(seq_down) + 1)],
170+
[None, None, None, None, None, "<Shift-DOWN>"]
171+
)
172+
self.assertEqual(
173+
[events.get_key(seq_right[:i], encoding="utf8") for i in range(1, len(seq_right) + 1)],
174+
[None, None, None, None, None, "<Shift-RIGHT>"]
175+
)
176+
self.assertEqual(
177+
[events.get_key(seq_left[:i], encoding="utf8") for i in range(1, len(seq_left) + 1)],
178+
[None, None, None, None, None, "<Shift-LEFT>"]
179+
)

0 commit comments

Comments
 (0)