summaryrefslogtreecommitdiffstats
path: root/Lib/_pyrepl/commands.py
diff options
context:
space:
mode:
authorƁukasz Langa <lukasz@langa.pl>2025-05-02 18:22:31 (GMT)
committerGitHub <noreply@github.com>2025-05-02 18:22:31 (GMT)
commitfac41f56d4b6b858cb52b40529855cce85cdbdcc (patch)
tree70490d6d77240385c4ca99281c7e5333261e89dd /Lib/_pyrepl/commands.py
parentbfcbb28223b733b9cb88f152a059a9e1416f3467 (diff)
downloadcpython-fac41f56d4b6b858cb52b40529855cce85cdbdcc.zip
cpython-fac41f56d4b6b858cb52b40529855cce85cdbdcc.tar.gz
cpython-fac41f56d4b6b858cb52b40529855cce85cdbdcc.tar.bz2
gh-131507: Add support for syntax highlighting in PyREPL (GH-133247)
Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Diffstat (limited to 'Lib/_pyrepl/commands.py')
-rw-r--r--Lib/_pyrepl/commands.py29
1 files changed, 18 insertions, 11 deletions
diff --git a/Lib/_pyrepl/commands.py b/Lib/_pyrepl/commands.py
index cbb6d85..2054a8e 100644
--- a/Lib/_pyrepl/commands.py
+++ b/Lib/_pyrepl/commands.py
@@ -21,6 +21,7 @@
from __future__ import annotations
import os
+import time
# Categories of actions:
# killing
@@ -31,6 +32,7 @@ import os
# finishing
# [completion]
+from .trace import trace
# types
if False:
@@ -471,19 +473,24 @@ class show_history(Command):
class paste_mode(Command):
-
def do(self) -> None:
self.reader.paste_mode = not self.reader.paste_mode
self.reader.dirty = True
-class enable_bracketed_paste(Command):
- def do(self) -> None:
- self.reader.paste_mode = True
- self.reader.in_bracketed_paste = True
-
-class disable_bracketed_paste(Command):
- def do(self) -> None:
- self.reader.paste_mode = False
- self.reader.in_bracketed_paste = False
- self.reader.dirty = True
+class perform_bracketed_paste(Command):
+ def do(self) -> None:
+ done = "\x1b[201~"
+ data = ""
+ start = time.time()
+ while done not in data:
+ self.reader.console.wait(100)
+ ev = self.reader.console.getpending()
+ data += ev.data
+ trace(
+ "bracketed pasting of {l} chars done in {s:.2f}s",
+ l=len(data),
+ s=time.time() - start,
+ )
+ self.reader.insert(data.replace(done, ""))
+ self.reader.last_refresh_cache.invalidated = True