Skip to content

Commit 1f7bf1f

Browse files
committed
Removed key_repeat_queue, only use the event_queue
And replaced deque.insert(0, o) with deque.appendleft(o) for O(1) insertion
1 parent ebe00f0 commit 1f7bf1f

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

Lib/_pyrepl/windows_console.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ def __init__(
132132
self.height = 25
133133
self.__offset = 0
134134
self.event_queue: deque[Event] = deque()
135-
self.key_repeat_queue: deque[Event] = deque()
136135
try:
137136
self.out = io._WindowsConsoleIO(self.output_fd, "w") # type: ignore[attr-defined]
138137
except ValueError:
@@ -347,7 +346,7 @@ def move_cursor(self, x: int, y: int) -> None:
347346
raise ValueError(f"Bad cursor position {x}, {y}")
348347

349348
if y < self.__offset or y >= self.__offset + self.height:
350-
self.event_queue.insert(0, Event("scroll", ""))
349+
self.event_queue.appendleft(Event("scroll", ""))
351350
else:
352351
self._move_relative(x, y)
353352
self.__posxy = x, y
@@ -395,9 +394,6 @@ def get_event(self, block: bool = True) -> Event | None:
395394
"""Return an Event instance. Returns None if |block| is false
396395
and there is no event pending, otherwise waits for the
397396
completion of an event."""
398-
if self.key_repeat_queue:
399-
return self.key_repeat_queue.pop()
400-
401397
if self.event_queue:
402398
return self.event_queue.pop()
403399

@@ -420,7 +416,7 @@ def get_event(self, block: bool = True) -> Event | None:
420416
if event is not None:
421417
# Queue this key event to be repeated if wRepeatCount > 1, such as when a 'dead key' is pressed twice
422418
for _ in range(rec.Event.KeyEvent.wRepeatCount - 1):
423-
self.key_repeat_queue.appendleft(event)
419+
self.event_queue.appendleft(event)
424420
elif block:
425421
# The key event didn't ectually type a character, block until next event
426422
continue
@@ -444,15 +440,15 @@ def _event_from_keyevent(self, key_event: KeyEvent) -> Event | None:
444440
key = f"ctrl {key}"
445441
elif key_event.dwControlKeyState & ALT_ACTIVE:
446442
# queue the key, return the meta command
447-
self.event_queue.insert(0, Event(evt="key", data=key, raw=key))
443+
self.event_queue.appendleft(Event(evt="key", data=key, raw=key))
448444
return Event(evt="key", data="\033") # keymap.py uses this for meta
449445
return Event(evt="key", data=key, raw=key)
450446

451447
return None
452448

453449
if key_event.dwControlKeyState & ALT_ACTIVE:
454450
# queue the key, return the meta command
455-
self.event_queue.insert(0, Event(evt="key", data=key, raw=raw_key))
451+
self.event_queue.appendleft(Event(evt="key", data=key, raw=raw_key))
456452
return Event(evt="key", data="\033") # keymap.py uses this for meta
457453

458454
return Event(evt="key", data=key, raw=raw_key)
@@ -503,7 +499,7 @@ def wait(self, timeout: float | None) -> bool:
503499
# Poor man's Windows select loop
504500
start_time = time.time()
505501
while True:
506-
if msvcrt.kbhit() or self.key_repeat_queue: # type: ignore[attr-defined]
502+
if msvcrt.kbhit() or self.event_queue: # type: ignore[attr-defined]
507503
return True
508504
if timeout and time.time() - start_time > timeout / 1000:
509505
return False

0 commit comments

Comments
 (0)