◐ Shell
clean mode source ↗

[3.14] GH-130328: Speedup pasting in legacy console on Windows (gh-133728) by miss-islington · Pull Request #134653 · python/cpython

Expand Up @@ -419,10 +419,7 @@ def _getscrollbacksize(self) -> int:
return info.srWindow.Bottom # type: ignore[no-any-return]
def _read_input(self, block: bool = True) -> INPUT_RECORD | None: if not block and not self.wait(timeout=0): return None
def _read_input(self) -> INPUT_RECORD | None: rec = INPUT_RECORD() read = DWORD() if not ReadConsoleInput(InHandle, rec, 1, read): Expand All @@ -431,14 +428,10 @@ def _read_input(self, block: bool = True) -> INPUT_RECORD | None: return rec
def _read_input_bulk( self, block: bool, n: int self, n: int ) -> tuple[ctypes.Array[INPUT_RECORD], int]: rec = (n * INPUT_RECORD)() read = DWORD()
if not block and not self.wait(timeout=0): return rec, 0
if not ReadConsoleInput(InHandle, rec, n, read): raise WinError(GetLastError())
Expand All @@ -449,8 +442,11 @@ def get_event(self, block: bool = True) -> Event | None: and there is no event pending, otherwise waits for the completion of an event."""
if not block and not self.wait(timeout=0): return None
while self.event_queue.empty(): rec = self._read_input(block) rec = self._read_input() if rec is None: return None
Expand Down Expand Up @@ -551,12 +547,20 @@ def getpending(self) -> Event: if e2: e.data += e2.data
recs, rec_count = self._read_input_bulk(False, 1024) recs, rec_count = self._read_input_bulk(1024) for i in range(rec_count): rec = recs[i] # In case of a legacy console, we do not only receive a keydown # event, but also a keyup event - and for uppercase letters # an additional SHIFT_PRESSED event. if rec and rec.EventType == KEY_EVENT: key_event = rec.Event.KeyEvent if not key_event.bKeyDown: continue ch = key_event.uChar.UnicodeChar if ch == "\x00": # ignore SHIFT_PRESSED and special keys continue if ch == "\r": ch += "\n" e.data += ch Expand Down