diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py index 0ebd9162eca4bb..6536b9316c1e59 100644 --- a/Lib/_pyrepl/reader.py +++ b/Lib/_pyrepl/reader.py @@ -28,12 +28,13 @@ from dataclasses import dataclass, field, fields from . import commands, console, input -from .utils import wlen, unbracket, disp_str, gen_colors, THEME +from .utils import wlen, unbracket, disp_str, gen_colors, ColorSpan, THEME from .trace import trace # types Command = commands.Command +from collections.abc import Callable, Iterator from .types import Callback, SimpleContextManager, KeySpec, CommandName @@ -213,6 +214,7 @@ class Reader: lxy: tuple[int, int] = field(init=False) scheduled_commands: list[str] = field(default_factory=list) can_colorize: bool = False + gen_colors: Callable[[str], Iterator[ColorSpan]] = field(default=gen_colors) threading_hook: Callback | None = None ## cached metadata to speed up screen refreshes @@ -312,7 +314,7 @@ def calc_screen(self) -> list[str]: prompt_from_cache = (offset and self.buffer[offset - 1] != "\n") if self.can_colorize: - colors = list(gen_colors(self.get_unicode())) + colors = list(self.gen_colors(self.get_unicode())) else: colors = None trace("colors = {colors}", colors=colors) diff --git a/Misc/NEWS.d/next/Library/2025-11-16-08-45-48.gh-issue-139167.Yr43k1.rst b/Misc/NEWS.d/next/Library/2025-11-16-08-45-48.gh-issue-139167.Yr43k1.rst new file mode 100644 index 00000000000000..35a471f9b3bffb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-11-16-08-45-48.gh-issue-139167.Yr43k1.rst @@ -0,0 +1 @@ +Allow users to use customized ``gen_colors`` function for pyrepl ``Reader``.