From 6ab5c4aa05bf35832a3ccd1e71b28b8475fa30f4 Mon Sep 17 00:00:00 2001 From: FeH2 Date: Tue, 11 Mar 2025 05:54:49 +0800 Subject: [PATCH] gh-124927: Fix conversion issue between coordinates and position in REPL (#125001) --- Lib/_pyrepl/reader.py | 3 ++- Lib/test/test_pyrepl/test_reader.py | 8 ++++++++ Misc/ACKS | 1 + .../2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2024-10-05-13-25-07.gh-issue-124927.uzNA32.rst diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py index 1252847e02b2..4795c51296a5 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 @@ 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 diff --git a/Lib/test/test_pyrepl/test_reader.py b/Lib/test/test_pyrepl/test_reader.py index f3b243d3c279..468c0c5e68d1 100644 --- a/Lib/test/test_pyrepl/test_reader.py +++ b/Lib/test/test_pyrepl/test_reader.py @@ -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) diff --git a/Misc/ACKS b/Misc/ACKS index d110002ffeb8..da528f8b4ca3 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 000000000000..1fc485cd0527 --- /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. -- 2.47.3