mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
[3.13] gh-123177: Fix prompt for wrapped lines in pyrepl (GH-123324) (#123327)
gh-123177: Fix prompt for wrapped lines in pyrepl (GH-123324)
When display lines above the cursor come from the cache, the first line
to not come from the cache may be a wrapped line, starting half way
through a logical line in the buffer. Detect and handle this case to
avoid accidentally drawing a stray prompt in the middle of a logical
line.
(cherry picked from commit 602fcf97df
)
Co-authored-by: Matt Wozniski <mwozniski@bloomberg.net>
This commit is contained in:
parent
4817365581
commit
865bfb1530
3 changed files with 42 additions and 1 deletions
|
@ -31,6 +31,37 @@ class TestReader(TestCase):
|
|||
reader, _ = handle_events_narrow_console(events)
|
||||
self.assert_screen_equals(reader, f"{9*"a"}\\\n{9*"a"}\\\naa")
|
||||
|
||||
def test_calc_screen_prompt_handling(self):
|
||||
def prepare_reader_keep_prompts(*args, **kwargs):
|
||||
reader = prepare_reader(*args, **kwargs)
|
||||
del reader.get_prompt
|
||||
reader.ps1 = ">>> "
|
||||
reader.ps2 = ">>> "
|
||||
reader.ps3 = "... "
|
||||
reader.ps4 = ""
|
||||
reader.can_colorize = False
|
||||
reader.paste_mode = False
|
||||
return reader
|
||||
|
||||
events = code_to_events("if some_condition:\nsome_function()")
|
||||
reader, _ = handle_events_narrow_console(
|
||||
events,
|
||||
prepare_reader=prepare_reader_keep_prompts,
|
||||
)
|
||||
# fmt: off
|
||||
self.assert_screen_equals(
|
||||
reader,
|
||||
(
|
||||
">>> if so\\\n"
|
||||
"me_condit\\\n"
|
||||
"ion:\n"
|
||||
"... s\\\n"
|
||||
"ome_funct\\\n"
|
||||
"ion()"
|
||||
)
|
||||
)
|
||||
# fmt: on
|
||||
|
||||
def test_calc_screen_wrap_three_lines_mixed_character(self):
|
||||
# fmt: off
|
||||
code = (
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue