]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-127349: Add check for correct resizing in REPL (GH-127387) (#129485)
authordonBarbos <donbarbos@proton.me>
Tue, 4 Feb 2025 14:18:22 +0000 (18:18 +0400)
committerGitHub <noreply@github.com>
Tue, 4 Feb 2025 14:18:22 +0000 (15:18 +0100)
(cherry picked from commit 510fefdc625dd2ed2b6b3975314a59e291b94ae8)

Lib/_pyrepl/reader.py
Lib/test/test_pyrepl/test_reader.py
Misc/NEWS.d/next/Core_and_Builtins/2024-11-30-16-13-31.gh-issue-127349.ssYd6n.rst [new file with mode: 0644]

index 935c520c5ad553cdc88afd8c6a5c953c075a7dc6..dc26bfd3a34ffb310e21dcc53d7cfadfac4a8dd0 100644 (file)
@@ -587,10 +587,11 @@ class Reader:
     def pos2xy(self) -> tuple[int, int]:
         """Return the x, y coordinates of position 'pos'."""
         # this *is* incomprehensible, yes.
-        y = 0
+        p, y = 0, 0
+        l2: list[int] = []
         pos = self.pos
         assert 0 <= pos <= len(self.buffer)
-        if pos == len(self.buffer):
+        if pos == len(self.buffer) and len(self.screeninfo) > 0:
             y = len(self.screeninfo) - 1
             p, l2 = self.screeninfo[y]
             return p + sum(l2) + l2.count(0), y
index 8c5efd003de5e843b9f9e27322a88264d0fcce7e..27c6d6664eda9e9d1963c7de38d115ac587a022d 100644 (file)
@@ -2,10 +2,9 @@ import itertools
 import functools
 import rlcompleter
 from unittest import TestCase
-from unittest.mock import MagicMock, patch
+from unittest.mock import MagicMock
 
-from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader
-from test.support import import_helper
+from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader, prepare_console
 from _pyrepl.console import Event
 from _pyrepl.reader import Reader
 
@@ -313,3 +312,10 @@ class TestReader(TestCase):
         reader, _ = handle_all_events(events, prepare_reader=completing_reader)
 
         self.assert_screen_equals(reader, f"{code}a")
+
+    def test_pos2xy_with_no_columns(self):
+        console = prepare_console([])
+        reader = prepare_reader(console)
+        # Simulate a resize to 0 columns
+        reader.screeninfo = []
+        self.assertEqual(reader.pos2xy(), (0, 0))
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-11-30-16-13-31.gh-issue-127349.ssYd6n.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-30-16-13-31.gh-issue-127349.ssYd6n.rst
new file mode 100644 (file)
index 0000000..3c1586b
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed the error when resizing terminal in Python REPL. Patch by Semyon
+Moroz.