From 4a433135ac094016d80db902b1d5aa5b15d3508f Mon Sep 17 00:00:00 2001 From: GabrielvMarinho <147559808+GabrielvMarinho@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:28:32 -0300 Subject: [PATCH 1/4] Add screen height and width updating at Reader.refresh and remove redundant UnixConsole line --- Lib/_pyrepl/reader.py | 1 + Lib/_pyrepl/unix_console.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py index 9ab92f64d1ef63..f0116e742d2398 100644 --- a/Lib/_pyrepl/reader.py +++ b/Lib/_pyrepl/reader.py @@ -644,6 +644,7 @@ def update_screen(self) -> None: def refresh(self) -> None: """Recalculate and refresh the screen.""" + self.console.height, self.console.width = self.console.getheightwidth() # this call sets up self.cxy, so call it first. self.screen = self.calc_screen() self.console.refresh(self.screen, self.cxy) diff --git a/Lib/_pyrepl/unix_console.py b/Lib/_pyrepl/unix_console.py index 937b5df6ff7d4c..639d16db3f88d4 100644 --- a/Lib/_pyrepl/unix_console.py +++ b/Lib/_pyrepl/unix_console.py @@ -776,7 +776,6 @@ def __move_tall(self, x, y): self.__write_code(self._cup, y - self.__offset, x) def __sigwinch(self, signum, frame): - self.height, self.width = self.getheightwidth() self.event_queue.insert(Event("resize", None)) def __hide_cursor(self): From 47c745330a439e89c1219f00081011bb69a5bdbf Mon Sep 17 00:00:00 2001 From: GabrielvMarinho <147559808+GabrielvMarinho@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:58:01 -0300 Subject: [PATCH 2/4] Update getheightwidth MagicMocks to return height and width with side_effect argument --- Lib/test/test_pyrepl/support.py | 2 ++ Lib/test/test_pyrepl/test_reader.py | 1 + Lib/test/test_pyrepl/test_windows_console.py | 14 ++++---------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Lib/test/test_pyrepl/support.py b/Lib/test/test_pyrepl/support.py index 4f7f9d77933336..307bf4505550d6 100644 --- a/Lib/test/test_pyrepl/support.py +++ b/Lib/test/test_pyrepl/support.py @@ -88,6 +88,8 @@ def prepare_console(events: Iterable[Event], **kwargs) -> MagicMock | Console: console.get_event.side_effect = events console.height = 100 console.width = 80 + console.getheightwidth = MagicMock(side_effect=lambda: (console.height, console.width)) + for key, val in kwargs.items(): setattr(console, key, val) return console diff --git a/Lib/test/test_pyrepl/test_reader.py b/Lib/test/test_pyrepl/test_reader.py index b1b6ae16a1e592..fbf557115f8a25 100644 --- a/Lib/test/test_pyrepl/test_reader.py +++ b/Lib/test/test_pyrepl/test_reader.py @@ -228,6 +228,7 @@ def _prepare_console(events): console.get_event.side_effect = events console.height = 100 console.width = 80 + console.getheightwidth = MagicMock(side_effect=lambda: (console.height, console.width)) console.input_hook = input_hook return console diff --git a/Lib/test/test_pyrepl/test_windows_console.py b/Lib/test/test_pyrepl/test_windows_console.py index f03f84e0985c1f..dbd0e7b071a279 100644 --- a/Lib/test/test_pyrepl/test_windows_console.py +++ b/Lib/test/test_pyrepl/test_windows_console.py @@ -129,9 +129,7 @@ def test_resize_wider(self): events = code_to_events(code) reader, console = self.handle_events_narrow(events) - console.height = 20 - console.width = 80 - console.getheightwidth = MagicMock(lambda _: (20, 80)) + console.getheightwidth = MagicMock(side_effect=lambda: (20, 80)) def same_reader(_): return reader @@ -157,9 +155,7 @@ def test_resize_narrower(self): events = code_to_events(code) reader, console = self.handle_events(events) - console.height = 20 - console.width = 4 - console.getheightwidth = MagicMock(lambda _: (20, 4)) + console.getheightwidth = MagicMock(side_effect=lambda: (20, 4)) def same_reader(_): return reader @@ -292,8 +288,7 @@ def test_resize_bigger_on_multiline_function(self): events = itertools.chain(code_to_events(code)) reader, console = self.handle_events_short(events) - console.height = 2 - console.getheightwidth = MagicMock(lambda _: (2, 80)) + console.getheightwidth = MagicMock(side_effect=lambda: (2, 80)) def same_reader(_): return reader @@ -330,8 +325,7 @@ def test_resize_smaller_on_multiline_function(self): events = itertools.chain(code_to_events(code)) reader, console = self.handle_events_height_3(events) - console.height = 1 - console.getheightwidth = MagicMock(lambda _: (1, 80)) + console.getheightwidth = MagicMock(side_effect=lambda: (1, 80)) def same_reader(_): return reader From 42dd0dec5a37e5aabec988e8b73f014345e5dcc0 Mon Sep 17 00:00:00 2001 From: gabrielvmarinho Date: Fri, 27 Mar 2026 17:53:42 -0300 Subject: [PATCH 3/4] Add side effect for unix console testing Mocks --- Lib/test/test_pyrepl/test_unix_console.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyrepl/test_unix_console.py b/Lib/test/test_pyrepl/test_unix_console.py index a1ee6d4878fe93..8198d489188f1e 100644 --- a/Lib/test/test_pyrepl/test_unix_console.py +++ b/Lib/test/test_pyrepl/test_unix_console.py @@ -250,8 +250,7 @@ def test_resize_bigger_on_multiline_function(self, _os_write): events = itertools.chain(code_to_events(code)) reader, console = handle_events_short_unix_console(events) - console.height = 2 - console.getheightwidth = MagicMock(lambda _: (2, 80)) + console.getheightwidth = MagicMock(side_effect=lambda: (2, 80)) def same_reader(_): return reader @@ -286,8 +285,7 @@ def test_resize_smaller_on_multiline_function(self, _os_write): events = itertools.chain(code_to_events(code)) reader, console = handle_events_unix_console_height_3(events) - console.height = 1 - console.getheightwidth = MagicMock(lambda _: (1, 80)) + console.getheightwidth = MagicMock(side_effect=lambda: (1, 80)) def same_reader(_): return reader From cdd82640f082053a8471679b6dfa22d68b26560c Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 22:06:12 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Windows/2026-03-27-22-06-10.gh-issue-146458.fYj0UQ.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Windows/2026-03-27-22-06-10.gh-issue-146458.fYj0UQ.rst diff --git a/Misc/NEWS.d/next/Windows/2026-03-27-22-06-10.gh-issue-146458.fYj0UQ.rst b/Misc/NEWS.d/next/Windows/2026-03-27-22-06-10.gh-issue-146458.fYj0UQ.rst new file mode 100644 index 00000000000000..1be5e29b78cfa2 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-03-27-22-06-10.gh-issue-146458.fYj0UQ.rst @@ -0,0 +1 @@ +Fix incorrect REPL height and width tracking on console window resize