https://github.com/python/cpython/commit/6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4
commit: 6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4
branch: main
author: FeH2 <i...@feh2.im>
committer: pablogsal <pablog...@gmail.com>
date: 2025-03-10T21:54:49Z
summary:

gh-124927: Fix conversion issue between coordinates and position in REPL 
(#125001)

files:
A Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst
M Lib/_pyrepl/reader.py
M Lib/test/test_pyrepl/test_reader.py
M Misc/ACKS

diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py
index 1252847e02b2ea..4795c51296a500 100644
--- a/Lib/_pyrepl/reader.py
+++ b/Lib/_pyrepl/reader.py
@@ -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 @@ def setpos_from_xy(self, x: int, y: int) -> None:
         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
diff --git a/Lib/test/test_pyrepl/test_reader.py 
b/Lib/test/test_pyrepl/test_reader.py
index f3b243d3c279e5..468c0c5e68d165 100644
--- a/Lib/test/test_pyrepl/test_reader.py
+++ b/Lib/test/test_pyrepl/test_reader.py
@@ -319,3 +319,11 @@ def test_pos2xy_with_no_columns(self):
         # 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)
diff --git a/Misc/ACKS b/Misc/ACKS
index d110002ffeb86c..da528f8b4ca3a7 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -279,6 +279,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
index 00000000000000..1fc485cd0527f0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst
@@ -0,0 +1 @@
+Non-printing characters are now properly handled in the new REPL.

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to