-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
gh-138122: Integrate live profiler TUI with _colorize theming system #142360
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…ystem The Tachyon profiler's curses-based TUI now uses the centralized theming infrastructure in _colorize.py, enabling users to customize colors via the standard Python theming API. This adds a LiveProfiler theme section with two pre-configured themes: the default dark theme optimized for dark terminal backgrounds, and LiveProfilerLight for white/light backgrounds. Users can switch themes by calling _colorize.set_theme() in their PYTHONSTARTUP or sitecustomize.py. The table header rendering was also improved to draw a continuous background, eliminating visual gaps between columns when using reverse video styling.
f2753f1 to
b024e50
Compare
I thought that this wasn't yet ready for public interface? should we really advertise this feature in the NEWS (cc @hugovk) |
| NoColors = ANSIColors() | ||
|
|
||
|
|
||
| class CursesColors: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would rather have this one after the for-loop as it's not tied to ANSI colors.
Is not but eventually that will be the mechanism. I can change the news entry if you want |
|
Originally, I preferred not advertising this interface officially for now otherwise users could assume that they can freely use it as they want (and we don't know how we eventually want to document and expose it) but I saw that we had other NEWS entries that mentioned |
|
Yep, hopefully we'll have something public for 3.15. In the meantime we could say experimental. |
Misc/NEWS.d/next/Library/2025-12-06-19-49-20.gh-issue-138122.m3EF9E.rst
Outdated
Show resolved
Hide resolved
|
|
||
|
|
||
| @dataclass(frozen=True, kw_only=True) | ||
| class LiveProfiler(ThemeSection): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please slot this and LiveProfilerLight in alphabetically between the other classes.
| theme = _colorize.get_theme(force_color=True) | ||
| profiler_theme = theme.live_profiler |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe combine and just use theme below instead of profiler_theme?
| theme = _colorize.get_theme(force_color=True) | |
| profiler_theme = theme.live_profiler | |
| theme = _colorize.get_theme(force_color=True).live_profiler |
| self.display.init_color_pair(2, profiler_theme.file_fg, default_bg) | ||
| self.display.init_color_pair(3, profiler_theme.func_fg, default_bg) | ||
|
|
||
| header_bg = 2 if profiler_theme.background_style == "dark" else 4 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use colour constants instead of hardcoded 2 and 4?
| self.display.init_color_pair(1, profiler_theme.samples_fg, default_bg) | ||
| self.display.init_color_pair(2, profiler_theme.file_fg, default_bg) | ||
| self.display.init_color_pair(3, profiler_theme.func_fg, default_bg) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We use constants for 4+ below, should we use constants for 1-3?
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
The Tachyon profiler's curses-based TUI now uses the centralized theming
infrastructure in _colorize.py, enabling users to customize colors via
the standard Python theming API. This adds a LiveProfiler theme section
with two pre-configured themes: the default dark theme optimized for
dark terminal backgrounds, and LiveProfilerLight for white/light
backgrounds. Users can switch themes by calling _colorize.set_theme() in
their PYTHONSTARTUP or sitecustomize.py.
The table header rendering was also improved to draw a continuous
background, eliminating visual gaps between columns when using reverse
video styling.