Skip to content

Commit 49c066b

Browse files
committed
Fix multi-line prompt display
The first line of multi-line input should display ps1 (primary prompt) not ps2 (continuation prompt). This is important for vi mode where users navigate through existing multi-line code with cursor movements.
1 parent 37b78e4 commit 49c066b

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

Lib/_pyrepl/reader.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -630,9 +630,15 @@ def get_prompt(self, lineno: int, cursor_on_line: bool) -> str:
630630
elif self.paste_mode:
631631
prompt = "(paste) "
632632
elif "\n" in self.buffer:
633+
newline_count = self.buffer.count("\n")
634+
ends_with_newline = bool(self.buffer) and self.buffer[-1] == "\n"
633635
if lineno == 0:
634-
prompt = self.ps2
635-
elif self.ps4 and lineno == self.buffer.count("\n"):
636+
prompt = self.ps1
637+
elif lineno < newline_count:
638+
prompt = self.ps3
639+
elif ends_with_newline and lineno == newline_count:
640+
prompt = self.ps3
641+
elif self.ps4 and lineno == newline_count:
636642
prompt = self.ps4
637643
else:
638644
prompt = self.ps3

0 commit comments

Comments
 (0)