diff --git a/src/slobs_cli/__about__.py b/src/slobs_cli/__about__.py index 2dd03a9..d20bfe6 100644 --- a/src/slobs_cli/__about__.py +++ b/src/slobs_cli/__about__.py @@ -1,3 +1,3 @@ """module for package metadata.""" -__version__ = '0.11.0' +__version__ = '0.11.1' diff --git a/src/slobs_cli/console.py b/src/slobs_cli/console.py index 33b2b49..61476fe 100644 --- a/src/slobs_cli/console.py +++ b/src/slobs_cli/console.py @@ -1,21 +1,21 @@ """module for console output handling.""" +import os + import asyncclick as click from rich.console import Console out = Console() -err = Console(stderr=True, style='bold red') +err = Console( + stderr=True, style='bold red' if os.getenv('NO_COLOR', '') != '' else 'none' +) def highlight(ctx: click.Context, text: str) -> str: """Highlight text for console output.""" - if ctx.obj['style'].name == 'no_colour': - return text return f'[{ctx.obj["style"].highlight}]{text}[/{ctx.obj["style"].highlight}]' def warning(ctx: click.Context, text: str) -> str: """Format warning text for console output.""" - if ctx.obj['style'].name == 'no_colour': - return text - return f'[magenta]{text}[/magenta]' + return f'[{ctx.obj["style"].warning}]{text}[/{ctx.obj["style"].warning}]' diff --git a/src/slobs_cli/styles.py b/src/slobs_cli/styles.py index 2074b3b..e85f23d 100644 --- a/src/slobs_cli/styles.py +++ b/src/slobs_cli/styles.py @@ -20,10 +20,11 @@ class Style: """Base class for styles.""" name: str = 'no_colour' - border: str | None = None - header: str | None = None - cell: str | None = None - highlight: str | None = None + border: str = 'none' + header: str = 'none' + cell: str = 'none' + highlight: str = 'none' + warning: str = 'none' no_border: bool = False def __post_init__(self): @@ -43,6 +44,7 @@ class Red(Style): border: str = 'dark_red' cell: str = 'red' highlight: str = 'red3' + warning: str = 'magenta' @register_style @@ -55,6 +57,7 @@ class Magenta(Style): border: str = 'dark_magenta' cell: str = 'magenta' highlight: str = 'magenta3' + warning: str = 'magenta' @register_style @@ -67,6 +70,7 @@ class Purple(Style): border: str = 'purple' cell: str = 'medium_orchid' highlight: str = 'medium_orchid' + warning: str = 'magenta' @register_style @@ -79,6 +83,7 @@ class Blue(Style): border: str = 'dark_blue' cell: str = 'blue' highlight: str = 'blue3' + warning: str = 'magenta' @register_style @@ -91,6 +96,7 @@ class Cyan(Style): border: str = 'dark_cyan' cell: str = 'cyan' highlight: str = 'cyan3' + warning: str = 'magenta' @register_style @@ -103,6 +109,7 @@ class Green(Style): border: str = 'dark_green' cell: str = 'green' highlight: str = 'green3' + warning: str = 'magenta' @register_style @@ -115,6 +122,7 @@ class Yellow(Style): border: str = 'yellow3' cell: str = 'wheat1' highlight: str = 'yellow3' + warning: str = 'magenta' @register_style @@ -127,6 +135,7 @@ class Orange(Style): border: str = 'dark_orange' cell: str = 'orange' highlight: str = 'orange3' + warning: str = 'magenta' @register_style @@ -139,6 +148,7 @@ class White(Style): border: str = 'white' cell: str = 'white' highlight: str = 'white' + warning: str = 'magenta' @register_style @@ -151,6 +161,7 @@ class Grey(Style): border: str = 'grey50' cell: str = 'grey70' highlight: str = 'grey90' + warning: str = 'magenta' @register_style @@ -163,6 +174,7 @@ class Navy(Style): border: str = 'deep_sky_blue4' cell: str = 'light_sky_blue3' highlight: str = 'light_sky_blue3' + warning: str = 'magenta' @register_style @@ -175,6 +187,7 @@ class Black(Style): border: str = 'black' cell: str = 'grey30' highlight: str = 'grey30' + warning: str = 'magenta' def request_style_obj(style_name: str, no_border: bool) -> Style: diff --git a/src/slobs_cli/util.py b/src/slobs_cli/util.py index aacc0d7..e3305c0 100644 --- a/src/slobs_cli/util.py +++ b/src/slobs_cli/util.py @@ -10,6 +10,10 @@ def check_mark(ctx: click.Context, value: bool, empty_if_false: bool = False) -> if empty_if_false and not value: return '' - if os.getenv('NO_COLOR', '') != '' or ctx.obj['style'].name == 'no_colour': + # rich gracefully handles the absence of colour throughout the rest of the application, + # but here we must handle it manually. + # If NO_COLOR is set, we return plain text symbols. + # Otherwise, we return coloured symbols. + if os.getenv('NO_COLOR', '') != '': return '✓' if value else '✗' return '✅' if value else '❌'