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

This commit is contained in:
FeH2 2025-03-11 05:54:49 +08:00 committed by GitHub
parent a931a8b324
commit 6ab5c4aa05
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"): elif unicodedata.category(c).startswith("C"):
c = r"\u%04x" % ord(c) c = r"\u%04x" % ord(c)
s.append(c) s.append(c)
b.extend([0] * (len(c) - 1)) b.append(len(c))
else: else:
s.append(c) s.append(c)
b.append(str_width(c)) b.append(str_width(c))
@ -577,6 +577,7 @@ class Reader:
cur_x = self.screeninfo[i][0] cur_x = self.screeninfo[i][0]
while cur_x < x: while cur_x < x:
if self.screeninfo[i][1][j] == 0: if self.screeninfo[i][1][j] == 0:
j += 1 # prevent potential future infinite loop
continue continue
cur_x += self.screeninfo[i][1][j] cur_x += self.screeninfo[i][1][j]
j += 1 j += 1

View file

@ -319,3 +319,11 @@ class TestReader(TestCase):
# Simulate a resize to 0 columns # Simulate a resize to 0 columns
reader.screeninfo = [] reader.screeninfo = []
self.assertEqual(reader.pos2xy(), (0, 0)) 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

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

View file

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