Skip to content

Commit 3d674cf

Browse files
Fix support of typing unicode chars in pyrepl
1 parent d0eb01c commit 3d674cf

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

Lib/_pyrepl/base_eventqueue.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,13 @@ def push(self, char: int | bytes) -> None:
7474
Processes a character by updating the buffer and handling special key mappings.
7575
"""
7676
ord_char = char if isinstance(char, int) else ord(char)
77-
char = bytes(bytearray((ord_char,)))
78-
self.buf.append(ord_char)
77+
if ord_char > 255:
78+
char = bytes(char.encode(self.encoding))
79+
self.buf.extend(char)
80+
else:
81+
char = bytes(bytearray((ord_char,)))
82+
self.buf.append(ord_char)
83+
7984
if char in self.keymap:
8085
if self.keymap is self.compiled_keymap:
8186
# sanity check, buffer is empty when a special key comes

Lib/test/test_pyrepl/test_eventqueue.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,13 @@ def test_push_unrecognized_escape_sequence(self):
123123
self.assertEqual(eq.events[2].evt, "key")
124124
self.assertEqual(eq.events[2].data, "Z")
125125

126+
def test_push_unicode_character(self):
127+
eq = self.make_eventqueue()
128+
eq.keymap = {}
129+
eq.push("ч")
130+
self.assertEqual(eq.events[0].evt, "key")
131+
self.assertEqual(eq.events[0].data, "ч")
132+
126133

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

0 commit comments

Comments
 (0)