]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-119548: Add a 'clear' command to the REPL (#119549)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Sat, 25 May 2024 16:15:54 +0000 (17:15 +0100)
committerGitHub <noreply@github.com>
Sat, 25 May 2024 16:15:54 +0000 (16:15 +0000)
Lib/_pyrepl/reader.py
Lib/_pyrepl/simple_interact.py
Misc/NEWS.d/next/Core and Builtins/2024-05-25-16-45-27.gh-issue-119548.pqF9Y6.rst [new file with mode: 0644]

index 81df0c925ee6cba41ff77725e59a6b4848d94008..d2960bbb6121b334aefa26b96ca167c13b77fcc5 100644 (file)
@@ -238,6 +238,7 @@ class Reader:
     cxy: tuple[int, int] = field(init=False)
     lxy: tuple[int, int] = field(init=False)
     calc_screen: CalcScreen = field(init=False)
+    scheduled_commands: list[str] = field(default_factory=list)
 
     def __post_init__(self) -> None:
         # Enable the use of `insert` without a `prepare` call - necessary to
@@ -557,6 +558,10 @@ class Reader:
             self.restore()
             raise
 
+        while self.scheduled_commands:
+            cmd = self.scheduled_commands.pop()
+            self.do_cmd((cmd, []))
+
     def last_command_is(self, cls: type) -> bool:
         if not self.last_command:
             return False
index 8ab4dab757685ee6e85aa265eb1da422b17b797d..975533a425be232c59d3ceab10131e54dc6759c0 100644 (file)
@@ -57,12 +57,17 @@ def _strip_final_indent(text: str) -> str:
     return text
 
 
+def _clear_screen():
+    reader = _get_reader()
+    reader.scheduled_commands.append("clear_screen")
+
+
 REPL_COMMANDS = {
     "exit": _sitebuiltins.Quitter('exit', ''),
     "quit": _sitebuiltins.Quitter('quit' ,''),
     "copyright": _sitebuiltins._Printer('copyright', sys.copyright),
     "help": "help",
-    "clear": "clear_screen",
+    "clear": _clear_screen,
 }
 
 class InteractiveColoredConsole(code.InteractiveConsole):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-05-25-16-45-27.gh-issue-119548.pqF9Y6.rst b/Misc/NEWS.d/next/Core and Builtins/2024-05-25-16-45-27.gh-issue-119548.pqF9Y6.rst
new file mode 100644 (file)
index 0000000..0318790
--- /dev/null
@@ -0,0 +1 @@
+Add a ``clear`` command to the REPL. Patch by Pablo Galindo