aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/_colorize.py
diff options
context:
space:
mode:
authorƁukasz Langa <lukasz@langa.pl>2025-05-02 20:22:31 +0200
committerGitHub <noreply@github.com>2025-05-02 20:22:31 +0200
commitfac41f56d4b6b858cb52b40529855cce85cdbdcc (patch)
tree70490d6d77240385c4ca99281c7e5333261e89dd /Lib/_colorize.py
parentbfcbb28223b733b9cb88f152a059a9e1416f3467 (diff)
downloadcpython-fac41f56d4b6b858cb52b40529855cce85cdbdcc.tar.gz
cpython-fac41f56d4b6b858cb52b40529855cce85cdbdcc.zip
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/_colorize.py')
-rw-r--r--Lib/_colorize.py43
1 files changed, 42 insertions, 1 deletions
diff --git a/Lib/_colorize.py b/Lib/_colorize.py
index a39ff2ce5c1..54895488e74 100644
--- a/Lib/_colorize.py
+++ b/Lib/_colorize.py
@@ -7,7 +7,22 @@ COLORIZE = True
# types
if False:
- from typing import IO
+ from typing import IO, Literal
+
+ type ColorTag = Literal[
+ "PROMPT",
+ "KEYWORD",
+ "BUILTIN",
+ "COMMENT",
+ "STRING",
+ "NUMBER",
+ "OP",
+ "DEFINITION",
+ "SOFT_KEYWORD",
+ "RESET",
+ ]
+
+ theme: dict[ColorTag, str]
class ANSIColors:
@@ -23,6 +38,7 @@ class ANSIColors:
WHITE = "\x1b[37m" # more like LIGHT GRAY
YELLOW = "\x1b[33m"
+ BOLD = "\x1b[1m"
BOLD_BLACK = "\x1b[1;30m" # DARK GRAY
BOLD_BLUE = "\x1b[1;34m"
BOLD_CYAN = "\x1b[1;36m"
@@ -120,3 +136,28 @@ def can_colorize(*, file: IO[str] | IO[bytes] | None = None) -> bool:
return os.isatty(file.fileno())
except io.UnsupportedOperation:
return hasattr(file, "isatty") and file.isatty()
+
+
+def set_theme(t: dict[ColorTag, str] | None = None) -> None:
+ global theme
+
+ if t:
+ theme = t
+ return
+
+ colors = get_colors()
+ theme = {
+ "PROMPT": colors.BOLD_MAGENTA,
+ "KEYWORD": colors.BOLD_BLUE,
+ "BUILTIN": colors.CYAN,
+ "COMMENT": colors.RED,
+ "STRING": colors.GREEN,
+ "NUMBER": colors.YELLOW,
+ "OP": colors.RESET,
+ "DEFINITION": colors.BOLD,
+ "SOFT_KEYWORD": colors.BOLD_BLUE,
+ "RESET": colors.RESET,
+ }
+
+
+set_theme()