]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-127349: Add check for correct resizing in REPL (#127387)
authordonBarbos <donbarbos@proton.me>
Thu, 30 Jan 2025 19:34:09 +0000 (19:34 +0000)
committerGitHub <noreply@github.com>
Thu, 30 Jan 2025 19:34:09 +0000 (19:34 +0000)
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 4b0700d069c62129672aa90266bf58c794c7e5c5..1252847e02b2eacab4caed35b9af53efe6d9d594 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 863ecc61ddd432df0e11cc9ad8b17c05c8f19704..27c6d6664eda9e9d1963c7de38d115ac587a022d 100644 (file)
@@ -4,7 +4,7 @@ import rlcompleter
 from unittest import TestCase
 from unittest.mock import MagicMock
 
-from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader
+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
 
@@ -312,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.