Skip to content

Commit ab8efa7

Browse files
committed
fix vt on Windows
1 parent a06c42a commit ab8efa7

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Lib/_pyrepl/windows_console.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,9 @@ def get_event(self, block: bool = True) -> Event | None:
468468
return None
469469
elif self.__vt_support:
470470
# If virtual terminal is enabled, scanning VT sequences
471-
self.event_queue.push(rec.Event.KeyEvent.uChar.UnicodeChar)
471+
for char in raw_key.encode(self.event_queue.encoding,
472+
"replace"):
473+
self.event_queue.push(char.to_bytes())
472474
continue
473475

474476
if key_event.dwControlKeyState & ALT_ACTIVE:

Lib/test/test_pyrepl/test_eventqueue.py

+14
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,20 @@ def test_push_unrecognized_escape_sequence(self):
122122
self.assertEqual(eq.events[2].evt, "key")
123123
self.assertEqual(eq.events[2].data, "Z")
124124

125+
def test_push_unicode_character_two_bytes(self):
126+
eq = self.make_eventqueue()
127+
eq.keymap = {}
128+
129+
encoded_bytes = "ч".encode(eq.encoding, "replace")
130+
self.assertEqual(len(encoded_bytes), 2)
131+
eq.push(encoded_bytes[0].to_bytes())
132+
self.assertEqual(eq.get(), None)
133+
134+
eq.push(encoded_bytes[1].to_bytes())
135+
e = eq.get()
136+
self.assertEqual(e.evt, "key")
137+
self.assertEqual(e.data, "ч")
138+
125139

126140
@unittest.skipIf(support.MS_WINDOWS, "No Unix event queue on Windows")
127141
class TestUnixEventQueue(EventQueueTestBase, unittest.TestCase):

0 commit comments

Comments
 (0)