Skip to content

Commit dc3906a

Browse files
committed
gh-124927: Fix conversion issue between coordinates and position in REPL
1 parent 16cd6cc commit dc3906a

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

Lib/_pyrepl/reader.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def disp_str(buffer: str) -> tuple[str, list[int]]:
6262
elif unicodedata.category(c).startswith("C"):
6363
c = r"\u%04x" % ord(c)
6464
s.append(c)
65-
b.extend([0] * (len(c) - 1))
65+
b.append(len(c) - 1)
6666
else:
6767
s.append(c)
6868
b.append(str_width(c))
@@ -577,6 +577,7 @@ def setpos_from_xy(self, x: int, y: int) -> None:
577577
cur_x = self.screeninfo[i][0]
578578
while cur_x < x:
579579
if self.screeninfo[i][1][j] == 0:
580+
j += 1
580581
continue
581582
cur_x += self.screeninfo[i][1][j]
582583
j += 1

Lib/test/test_pyrepl/test_reader.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,12 @@ def test_key_press_on_tab_press_once(self):
312312
reader, _ = handle_all_events(events, prepare_reader=completing_reader)
313313

314314
self.assert_screen_equals(reader, f"{code}a")
315+
316+
def test_setpos_from_xy_for_non_printing_char(self):
317+
code = "# non \u200c printing character"
318+
events = code_to_events(code)
319+
320+
reader, _ = handle_all_events(events)
321+
reader.setpos_from_xy(8, 0)
322+
323+
self.assertEqual(reader.pos, 7)

0 commit comments

Comments
 (0)