Skip to content

Commit a054e5d

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 beca8d7 commit a054e5d

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
@@ -618,9 +618,15 @@ def get_prompt(self, lineno: int, cursor_on_line: bool) -> str:
618618
elif self.paste_mode:
619619
prompt = "(paste) "
620620
elif "\n" in self.buffer:
621+
newline_count = self.buffer.count("\n")
622+
ends_with_newline = bool(self.buffer) and self.buffer[-1] == "\n"
621623
if lineno == 0:
622-
prompt = self.ps2
623-
elif self.ps4 and lineno == self.buffer.count("\n"):
624+
prompt = self.ps1
625+
elif lineno < newline_count:
626+
prompt = self.ps3
627+
elif ends_with_newline and lineno == newline_count:
628+
prompt = self.ps3
629+
elif self.ps4 and lineno == newline_count:
624630
prompt = self.ps4
625631
else:
626632
prompt = self.ps3

0 commit comments

Comments
 (0)