You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
Python
65 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from enum import Enum
|
|
|
|
__all__ = [
|
|
"ColorDepth",
|
|
]
|
|
|
|
|
|
class ColorDepth(str, Enum):
|
|
"""
|
|
Possible color depth values for the output.
|
|
"""
|
|
|
|
value: str
|
|
|
|
#: One color only.
|
|
DEPTH_1_BIT = "DEPTH_1_BIT"
|
|
|
|
#: ANSI Colors.
|
|
DEPTH_4_BIT = "DEPTH_4_BIT"
|
|
|
|
#: The default.
|
|
DEPTH_8_BIT = "DEPTH_8_BIT"
|
|
|
|
#: 24 bit True color.
|
|
DEPTH_24_BIT = "DEPTH_24_BIT"
|
|
|
|
# Aliases.
|
|
MONOCHROME = DEPTH_1_BIT
|
|
ANSI_COLORS_ONLY = DEPTH_4_BIT
|
|
DEFAULT = DEPTH_8_BIT
|
|
TRUE_COLOR = DEPTH_24_BIT
|
|
|
|
@classmethod
|
|
def from_env(cls) -> ColorDepth | None:
|
|
"""
|
|
Return the color depth if the $PROMPT_TOOLKIT_COLOR_DEPTH environment
|
|
variable has been set.
|
|
|
|
This is a way to enforce a certain color depth in all prompt_toolkit
|
|
applications.
|
|
"""
|
|
# Disable color if a `NO_COLOR` environment variable is set.
|
|
# See: https://no-color.org/
|
|
if os.environ.get("NO_COLOR"):
|
|
return cls.DEPTH_1_BIT
|
|
|
|
# Check the `PROMPT_TOOLKIT_COLOR_DEPTH` environment variable.
|
|
all_values = [i.value for i in ColorDepth]
|
|
if os.environ.get("PROMPT_TOOLKIT_COLOR_DEPTH") in all_values:
|
|
return cls(os.environ["PROMPT_TOOLKIT_COLOR_DEPTH"])
|
|
|
|
return None
|
|
|
|
@classmethod
|
|
def default(cls) -> ColorDepth:
|
|
"""
|
|
Return the default color depth for the default output.
|
|
"""
|
|
from .defaults import create_output
|
|
|
|
return create_output().get_default_color_depth()
|