Colors - tmuxp._internal.colors¶
Warning
Be careful with these! Internal APIs are not covered by version policies. They can break or be removed between minor versions!
If you need an internal API stabilized please file an issue.
Color output utilities for tmuxp CLI.
This module provides semantic color utilities following patterns from vcspull and CPython’s _colorize module. It includes low-level ANSI styling functions and high-level semantic color utilities.
Examples
Basic usage with automatic TTY detection (AUTO mode is the default). In a TTY, colored text is returned; otherwise plain text:
>>> colors = Colors()
Force colors on or off:
>>> colors = Colors(ColorMode.ALWAYS)
>>> colors.success("loaded")
'...'
>>> colors = Colors(ColorMode.NEVER)
>>> colors.success("loaded")
'loaded'
Environment variables NO_COLOR and FORCE_COLOR are respected. NO_COLOR takes highest priority (disables even in ALWAYS mode):
>>> monkeypatch.setenv("NO_COLOR", "1")
>>> colors = Colors(ColorMode.ALWAYS)
>>> colors.success("loaded")
'loaded'
FORCE_COLOR enables colors in AUTO mode even without TTY:
>>> import sys
>>> monkeypatch.delenv("NO_COLOR", raising=False)
>>> monkeypatch.setenv("FORCE_COLOR", "1")
>>> monkeypatch.setattr(sys.stdout, "isatty", lambda: False)
>>> colors = Colors(ColorMode.AUTO)
>>> colors.success("loaded")
'...'
-
class tmuxp._internal.colors.ColorMode¶
Bases:
EnumColor output modes for CLI.
Examples
>>> ColorMode.AUTO.value 'auto' >>> ColorMode.ALWAYS.value 'always' >>> ColorMode.NEVER.value 'never'
-
class tmuxp._internal.colors.Colors¶
Bases:
objectSemantic color utilities for CLI output.
Provides semantic color methods (success, warning, error, etc.) that conditionally apply ANSI colors based on the color mode and environment.
- Parameters:
mode (ColorMode) – Color mode to use. Default is AUTO which detects TTY.
Examples
>>> colors = Colors(ColorMode.NEVER) >>> colors.success("session loaded") 'session loaded' >>> colors.error("failed to load") 'failed to load'
>>> colors = Colors(ColorMode.ALWAYS) >>> result = colors.success("ok")
Check that result contains ANSI escape codes:
>>> "\033[" in result True
-
tmuxp._internal.colors.get_color_mode(color_arg=None)¶
Convert CLI argument string to ColorMode enum.
Examples
>>> get_color_mode(None) <ColorMode.AUTO: 'auto'> >>> get_color_mode("always") <ColorMode.ALWAYS: 'always'> >>> get_color_mode("NEVER") <ColorMode.NEVER: 'never'> >>> get_color_mode("invalid") <ColorMode.AUTO: 'auto'>
-
tmuxp._internal.colors.strip_ansi(value)¶
Clear ANSI escape codes from a string value.
Examples
>>> strip_ansi("\033[32mgreen\033[0m") 'green' >>> strip_ansi("plain text") 'plain text'
-
tmuxp._internal.colors._interpret_color(color, offset=0)¶
Convert color specification to ANSI escape code number.
Examples
Color name returns base ANSI code:
>>> _interpret_color("red") '31'
256-color index returns extended format:
>>> _interpret_color(196) '38;5;196'
RGB tuple returns 24-bit format:
>>> _interpret_color((255, 128, 0)) '38;2;255;128;0'
-
exception tmuxp._internal.colors.UnknownStyleColor¶
Bases:
ExceptionRaised when encountering an unknown terminal style color.
Examples
>>> try: ... raise UnknownStyleColor("invalid_color") ... except UnknownStyleColor as e: ... "invalid_color" in str(e) True
-
tmuxp._internal.colors.style(text, fg=None, bg=None, bold=None, dim=None, underline=None, overline=None, italic=None, blink=None, reverse=None, strikethrough=None, reset=True)¶
Apply ANSI styling to text.
Credit: click.
Examples
>>> style("hello", fg="green") '\x1b[32m...' >>> "hello" in style("hello", fg="green") True
-
tmuxp._internal.colors.unstyle(text)¶
Remove ANSI styling information from a string.
Usually it’s not necessary to use this function as tmuxp_echo function will automatically remove styling if necessary.
Credit: click.
Examples
>>> unstyle("\033[32mgreen\033[0m") 'green'
-
tmuxp._internal.colors.build_description(intro, example_blocks)¶
Assemble help text with optional example sections.
- Parameters:
intro (str) – The introductory description text.
example_blocks (sequence of (heading, commands) tuples) – Each tuple contains an optional heading and a sequence of example commands. If heading is None, the section is titled “examples:”. If heading is provided, it becomes the section title (without “examples:”).
- Returns:
Formatted description with examples.
- Return type:
Examples
>>> from tmuxp._internal.colors import build_description >>> build_description("My tool.", [(None, ["mytool run"])]) 'My tool.\n\nexamples:\n mytool run'
>>> build_description("My tool.", [("sync", ["mytool sync repo"])]) 'My tool.\n\nsync examples:\n mytool sync repo'
>>> build_description("", [(None, ["cmd"])]) 'examples:\n cmd'