gh-119553: Clear reader on Ctrl-C command (GH-119801)

This commit is contained in:
Lysandros Nikolaou 2024-06-04 19:46:33 +02:00 committed by GitHub
parent d419d468ff
commit 010ea93b2b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 0 deletions

View file

@ -221,6 +221,7 @@ class interrupt(FinishCommand):
class ctrl_c(Command): class ctrl_c(Command):
def do(self) -> None: def do(self) -> None:
self.reader.finish()
raise KeyboardInterrupt raise KeyboardInterrupt

View file

@ -75,6 +75,8 @@ def handle_all_events(
reader.handle1() reader.handle1()
except StopIteration: except StopIteration:
pass pass
except KeyboardInterrupt:
pass
return reader, console return reader, console

View file

@ -179,6 +179,22 @@ class TestReader(TestCase):
self.assert_screen_equals(reader, expected) self.assert_screen_equals(reader, expected)
self.assertTrue(reader.finished) self.assertTrue(reader.finished)
def test_keyboard_interrupt_clears_screen(self):
namespace = {"itertools": itertools}
code = "import itertools\nitertools."
events = itertools.chain(code_to_events(code), [
Event(evt='key', data='\t', raw=bytearray(b'\t')), # Two tabs for completion
Event(evt='key', data='\t', raw=bytearray(b'\t')),
Event(evt='key', data='\x03', raw=bytearray(b'\x03')), # Ctrl-C
])
completing_reader = functools.partial(
prepare_reader,
readline_completer=rlcompleter.Completer(namespace).complete
)
reader, _ = handle_all_events(events, prepare_reader=completing_reader)
self.assertEqual(reader.calc_screen(), code.split("\n"))
def test_prompt_length(self): def test_prompt_length(self):
# Handles simple ASCII prompt # Handles simple ASCII prompt
ps1 = ">>> " ps1 = ">>> "