https://github.com/python/cpython/commit/8470593a98a5f17d72bea0df8287f43ba4f7f627
commit: 8470593a98a5f17d72bea0df8287f43ba4f7f627
branch: 3.13
author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com>
committer: pablogsal <pablog...@gmail.com>
date: 2024-05-31T08:35:21Z
summary:

[3.13] gh-119548: Add a 'clear' command to the REPL (GH-119549) (#119552)

gh-119548: Add a 'clear' command to the REPL (GH-119549)
(cherry picked from commit e3bac04c37f6823cebc74d97feae0e0c25818b31)

Co-authored-by: Pablo Galindo Salgado <pablog...@gmail.com>

files:
A Misc/NEWS.d/next/Core and 
Builtins/2024-05-25-16-45-27.gh-issue-119548.pqF9Y6.rst
M Lib/_pyrepl/reader.py
M Lib/_pyrepl/simple_interact.py

diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py
index 0f0ef15f9eb2ea..1c816d5bda5fed 100644
--- a/Lib/_pyrepl/reader.py
+++ b/Lib/_pyrepl/reader.py
@@ -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 @@ def prepare(self) -> None:
             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
diff --git a/Lib/_pyrepl/simple_interact.py b/Lib/_pyrepl/simple_interact.py
index 1568a73c1b5ec0..11e831c1d6c5d4 100644
--- a/Lib/_pyrepl/simple_interact.py
+++ b/Lib/_pyrepl/simple_interact.py
@@ -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
index 00000000000000..0318790d46f0a3
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and 
Builtins/2024-05-25-16-45-27.gh-issue-119548.pqF9Y6.rst 
@@ -0,0 +1 @@
+Add a ``clear`` command to the REPL. Patch by Pablo Galindo

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to