Module alexandria.shell.color

Shell color utilities

Expand source code
# SPDX-FileCopyrightText: © 2021 Antonio López Rivera <antonlopezr99@gmail.com>
# SPDX-License-Identifier: GPL-3.0-only

"""
Shell color utilities
---------------------
"""


import os
import sys


class colors:
    """
    ANSI color codes for color printing to shell.
    """

    reset           = "\033[0m"

    # Black
    fgBlack         = "\033[30m"
    fgBrightBlack   = "\033[30;1m"
    bgBlack         = "\033[40m"
    bgBrightBlack   = "\033[40;1m"

    # Red
    fgRed           = "\033[31m"
    fgBrightRed     = "\033[31;1m"
    bgRed           = "\033[41m"
    bgBrightRed     = "\033[41;1m"

    # Orange (may not be supported)
    fgOrange = "\033[38:2:252:127:0m"
    fgBrightOrange = "\033[38:2:255:165:0m"
    bgOrange = "\033[48:2:252:127:0m"
    bgBrightOrange = "\033[48:2:255:165:0m"

    # Green
    fgGreen         = "\033[32m"
    fgBrightGreen   = "\033[32;1m"
    bgGreen         = "\033[42m"
    bgBrightGreen   = "\033[42;1m"

    # Yellow
    fgYellow        = "\033[33m"
    fgBrightYellow  = "\033[33;1m"
    bgYellow        = "\033[43m"
    bgBrightYellow  = "\033[43;1m"

    # Blue
    fgBlue          = "\033[34m"
    fgBrightBlue    = "\033[34;1m"
    bgBlue          = "\033[44m"
    bgBrightBlue    = "\033[44;1m"

    # Magenta
    fgMagenta       = "\033[35m"
    fgBrightMagenta = "\033[35;1m"
    bgMagenta       = "\033[45m"
    bgBrightMagenta = "\033[45;1m"

    # Cyan
    fgCyan          = "\033[36m"
    fgBrightCyan    = "\033[36;1m"
    bgCyan          = "\033[46m"
    bgBrightCyan    = "\033[46;1m"

    # White
    fgWhite         = "\033[37m"
    fgBrightWhite   = "\033[37;1m"
    bgWhite         = "\033[47m"
    bgBrightWhite   = "\033[47;1m"

    # ANSI escape sequences https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences
    fmt_str         = '\033[%m'
    bold            = fmt_str.format(1)
    faint           = fmt_str.format(2)
    italic          = fmt_str.format(3)
    underline       = fmt_str.format(4)
    crossed         = fmt_str.format(9)
    framed          = fmt_str.format(51)
    encircled       = fmt_str.format(52)
    overlined       = fmt_str.format(53)


def shell_supports_color():
    """
    Returns True if the running terminal supports color, and False otherwise.

    Modified from the Django codebase - https://github.com/django/django/blob/main/django/core/management/color.py
    """
    plat = sys.platform
    supported_platform = plat != 'Pocket PC' and (plat != 'win32' or
                                                  'ANSICON' in os.environ or
                                                  os.getenv('ANSI_COLORS_DISABLED') is None)
    return supported_platform

Functions

def shell_supports_color()

Returns True if the running terminal supports color, and False otherwise.

Modified from the Django codebase - https://github.com/django/django/blob/main/django/core/management/color.py

Expand source code
def shell_supports_color():
    """
    Returns True if the running terminal supports color, and False otherwise.

    Modified from the Django codebase - https://github.com/django/django/blob/main/django/core/management/color.py
    """
    plat = sys.platform
    supported_platform = plat != 'Pocket PC' and (plat != 'win32' or
                                                  'ANSICON' in os.environ or
                                                  os.getenv('ANSI_COLORS_DISABLED') is None)
    return supported_platform

Classes

class colors

ANSI color codes for color printing to shell.

Expand source code
class colors:
    """
    ANSI color codes for color printing to shell.
    """

    reset           = "\033[0m"

    # Black
    fgBlack         = "\033[30m"
    fgBrightBlack   = "\033[30;1m"
    bgBlack         = "\033[40m"
    bgBrightBlack   = "\033[40;1m"

    # Red
    fgRed           = "\033[31m"
    fgBrightRed     = "\033[31;1m"
    bgRed           = "\033[41m"
    bgBrightRed     = "\033[41;1m"

    # Orange (may not be supported)
    fgOrange = "\033[38:2:252:127:0m"
    fgBrightOrange = "\033[38:2:255:165:0m"
    bgOrange = "\033[48:2:252:127:0m"
    bgBrightOrange = "\033[48:2:255:165:0m"

    # Green
    fgGreen         = "\033[32m"
    fgBrightGreen   = "\033[32;1m"
    bgGreen         = "\033[42m"
    bgBrightGreen   = "\033[42;1m"

    # Yellow
    fgYellow        = "\033[33m"
    fgBrightYellow  = "\033[33;1m"
    bgYellow        = "\033[43m"
    bgBrightYellow  = "\033[43;1m"

    # Blue
    fgBlue          = "\033[34m"
    fgBrightBlue    = "\033[34;1m"
    bgBlue          = "\033[44m"
    bgBrightBlue    = "\033[44;1m"

    # Magenta
    fgMagenta       = "\033[35m"
    fgBrightMagenta = "\033[35;1m"
    bgMagenta       = "\033[45m"
    bgBrightMagenta = "\033[45;1m"

    # Cyan
    fgCyan          = "\033[36m"
    fgBrightCyan    = "\033[36;1m"
    bgCyan          = "\033[46m"
    bgBrightCyan    = "\033[46;1m"

    # White
    fgWhite         = "\033[37m"
    fgBrightWhite   = "\033[37;1m"
    bgWhite         = "\033[47m"
    bgBrightWhite   = "\033[47;1m"

    # ANSI escape sequences https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences
    fmt_str         = '\033[%m'
    bold            = fmt_str.format(1)
    faint           = fmt_str.format(2)
    italic          = fmt_str.format(3)
    underline       = fmt_str.format(4)
    crossed         = fmt_str.format(9)
    framed          = fmt_str.format(51)
    encircled       = fmt_str.format(52)
    overlined       = fmt_str.format(53)

Class variables

var bgBlack
var bgBlue
var bgBrightBlack
var bgBrightBlue
var bgBrightCyan
var bgBrightGreen
var bgBrightMagenta
var bgBrightOrange
var bgBrightRed
var bgBrightWhite
var bgBrightYellow
var bgCyan
var bgGreen
var bgMagenta
var bgOrange
var bgRed
var bgWhite
var bgYellow
var bold
var crossed
var encircled
var faint
var fgBlack
var fgBlue
var fgBrightBlack
var fgBrightBlue
var fgBrightCyan
var fgBrightGreen
var fgBrightMagenta
var fgBrightOrange
var fgBrightRed
var fgBrightWhite
var fgBrightYellow
var fgCyan
var fgGreen
var fgMagenta
var fgOrange
var fgRed
var fgWhite
var fgYellow
var fmt_str
var framed
var italic
var overlined
var reset
var underline