mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
[3.13] gh-130804: Fix support of typing unicode chars in pyrepl (GH-130805) (GH-133462)
(cherry picked from commit 7c98b0674d
)
Co-authored-by: Sergey Miryanov <sergey.miryanov@gmail.com>
This commit is contained in:
parent
e4d68488bc
commit
76f52c434c
3 changed files with 17 additions and 3 deletions
|
@ -69,13 +69,19 @@ class BaseEventQueue:
|
|||
trace('added event {event}', event=event)
|
||||
self.events.append(event)
|
||||
|
||||
def push(self, char: int | bytes) -> None:
|
||||
def push(self, char: int | bytes | str) -> None:
|
||||
"""
|
||||
Processes a character by updating the buffer and handling special key mappings.
|
||||
"""
|
||||
ord_char = char if isinstance(char, int) else ord(char)
|
||||
char = bytes(bytearray((ord_char,)))
|
||||
self.buf.append(ord_char)
|
||||
if ord_char > 255:
|
||||
assert isinstance(char, str)
|
||||
char = bytes(char.encode(self.encoding, "replace"))
|
||||
self.buf.extend(char)
|
||||
else:
|
||||
char = bytes(bytearray((ord_char,)))
|
||||
self.buf.append(ord_char)
|
||||
|
||||
if char in self.keymap:
|
||||
if self.keymap is self.compiled_keymap:
|
||||
# sanity check, buffer is empty when a special key comes
|
||||
|
|
|
@ -123,6 +123,13 @@ class EventQueueTestBase:
|
|||
self.assertEqual(eq.events[2].evt, "key")
|
||||
self.assertEqual(eq.events[2].data, "Z")
|
||||
|
||||
def test_push_unicode_character(self):
|
||||
eq = self.make_eventqueue()
|
||||
eq.keymap = {}
|
||||
eq.push("ч")
|
||||
self.assertEqual(eq.events[0].evt, "key")
|
||||
self.assertEqual(eq.events[0].data, "ч")
|
||||
|
||||
|
||||
@unittest.skipIf(support.MS_WINDOWS, "No Unix event queue on Windows")
|
||||
class TestUnixEventQueue(EventQueueTestBase, unittest.TestCase):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix support of unicode characters on Windows in the new REPL.
|
Loading…
Add table
Add a link
Reference in a new issue