]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-124927: Fix conversion issue between coordinates and position in REPL ...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 10 Mar 2025 22:18:13 +0000 (23:18 +0100)
committerGitHub <noreply@github.com>
Mon, 10 Mar 2025 22:18:13 +0000 (22:18 +0000)
gh-124927: Fix conversion issue between coordinates and position in REPL (GH-125001)
(cherry picked from commit 6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4)

Co-authored-by: FeH2 <i@feh2.im>
Lib/_pyrepl/reader.py
Lib/test/test_pyrepl/test_reader.py
Misc/ACKS
Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst [new file with mode: 0644]

index dc26bfd3a34ffb310e21dcc53d7cfadfac4a8dd0..68e2a9d4bd29e3e68dc81980ad8661ee4154bceb 100644 (file)
@@ -62,7 +62,7 @@ def disp_str(buffer: str) -> tuple[str, list[int]]:
         elif unicodedata.category(c).startswith("C"):
             c = r"\u%04x" % ord(c)
             s.append(c)
-            b.extend([0] * (len(c) - 1))
+            b.append(len(c))
         else:
             s.append(c)
             b.append(str_width(c))
@@ -577,6 +577,7 @@ class Reader:
         cur_x = self.screeninfo[i][0]
         while cur_x < x:
             if self.screeninfo[i][1][j] == 0:
+                j += 1  # prevent potential future infinite loop
                 continue
             cur_x += self.screeninfo[i][1][j]
             j += 1
index 27c6d6664eda9e9d1963c7de38d115ac587a022d..270d4d4fb8ae65190f2acd55478e551ca3d8a75c 100644 (file)
@@ -319,3 +319,11 @@ class TestReader(TestCase):
         # Simulate a resize to 0 columns
         reader.screeninfo = []
         self.assertEqual(reader.pos2xy(), (0, 0))
+
+    def test_setpos_from_xy_for_non_printing_char(self):
+        code = "# non \u200c printing character"
+        events = code_to_events(code)
+
+        reader, _ = handle_all_events(events)
+        reader.setpos_from_xy(8, 0)
+        self.assertEqual(reader.pos, 7)
index 54e6076773793b6eabadd91f78f9f1b2b27f1e1a..b60ce58ca001148f9f03eecd711b59528dcb61fe 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -277,6 +277,7 @@ Laurent De Buyst
 Zach Byrne
 Vedran Čačić
 Nicolas Cadou
+Zhikai Cai
 Jp Calderone
 Ben Caller
 Arnaud Calmettes
diff --git a/Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst b/Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst
new file mode 100644 (file)
index 0000000..1fc485c
--- /dev/null
@@ -0,0 +1 @@
+Non-printing characters are now properly handled in the new REPL.