diff options
author | Ćukasz Langa <lukasz@langa.pl> | 2025-05-02 20:22:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-02 20:22:31 +0200 |
commit | fac41f56d4b6b858cb52b40529855cce85cdbdcc (patch) | |
tree | 70490d6d77240385c4ca99281c7e5333261e89dd /Lib/_colorize.py | |
parent | bfcbb28223b733b9cb88f152a059a9e1416f3467 (diff) | |
download | cpython-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.py | 43 |
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() |