gh-130804: Fix support of typing unicode chars in pyrepl (#130805)

This commit is contained in:
Sergey Miryanov 2025-03-11 03:13:50 +05:00 committed by GitHub
parent 6ab5c4aa05
commit 7c98b0674d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 17 additions and 3 deletions

View file

@ -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