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