[3.13] gh-124927: Fix conversion issue between coordinates and position in REPL (GH-125001) (#131061)

gh-124927: Fix conversion issue between coordinates and position in REPL (GH-125001)
(cherry picked from commit 6ab5c4aa05)

Co-authored-by: FeH2 <i@feh2.im>
This commit is contained in:
Miss Islington (bot) 2025-03-10 23:18:13 +01:00 committed by GitHub
parent cf829f49de
commit 977af3a6a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 12 additions and 1 deletions

View 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

View 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)

View file

@ -277,6 +277,7 @@ Laurent De Buyst
Zach Byrne
Vedran Čačić
Nicolas Cadou
Zhikai Cai
Jp Calderone
Ben Caller
Arnaud Calmettes

View file

@ -0,0 +1 @@
Non-printing characters are now properly handled in the new REPL.