From fac41f56d4b6b858cb52b40529855cce85cdbdcc Mon Sep 17 00:00:00 2001 From: Ɓukasz Langa Date: Fri, 2 May 2025 20:22:31 +0200 Subject: 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> --- Lib/_colorize.py | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'Lib/_colorize.py') 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() -- cgit v1.2.3