https://github.com/python/cpython/commit/6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4
commit: 6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4
branch: main
author: FeH2 <[email protected]>
committer: pablogsal <[email protected]>
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 -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]