Skip to main content

'Stylish ANSI terminal colors and helpers'

Project description

snazzy

Stylish ANSI terminal colors and helpers.

Build Status Latest Version License Coverage Status Code style: black Released with: Yabs StackOverflow: snazzy

demo run

Usage

from snazzy import enable_colors, green, wrap

enable_colors()

print("That looks " + green("good") + ", right?")

looks good

Note two things:

  1. snazzy is inactive by default, so we have to call enable_colors() first.
  2. The function green(<text>) wraps the text in ANSI escape sequences to apply green foreground color and reset to the default color afterwards.

The function green(<text>) is only a convenience shortcut for wrap(<text>, ...):

assert green("good") == wrap("good", fg="green")

However wrap() is more powerful and flexible, since it also allows to set background color and attributes (bold, italic, underline):

print(wrap("white on blue", "white", bg="blue"))
print(wrap("ERROR:", "yellow", bg="red", bold=True) + " that went wrong.")

Alternative pattern, using a context manager:

with Snazzy(fg="green", bg="black"))
    print("This is so eighties...")

The context manager pattern is syntactic sugar for for this explicit code:

print(ansi("green", bg="black"), end="")
print("This is so eighties...")
print(ansi_reset(), end="")

Available Formats

Colors

Color keys can be used as foreground or background using the fg=COLOR and bg=COLOR option respectively.
Note: Not all platforms implement all features see here for an overview.

These are well supported in most terminals:

"black", "red", "green", "yellow", "blue", "magenta", "cyan", "white".

These are less good supported:

"li_black", "li_red", "li_green", "li_yellow", "li_blue", "li_magenta", "li_cyan", "li_white".

These are less supported:

"da_black", "da_red", "da_green", "da_yellow", "da_blue", "da_magenta", "da_cyan", "da_white".

We can also pass RGB tuples like so if the platform supports it:

print(wrap("white on blue", (255, 255, 255), bg=(0, 0, 200)))

Effects

The following effects are available:

"bold", "dim", "italic", "underline", "blink", "inverse", "hidden", "strike".

("b", "i", and "u" may be used as alias for bold, italic, and underline.)

Format Reset

The following codes reset distinct formattings to default values:

"reset_all", "reset_fg", "reset_bg", "reset_bold_dim", "reset_italic", "reset_underline", "reset_blink", "reset_inverse", "reset_hidden", "reset_strike".

(The wrap() methods appends this automatically to the wrapped text.)

Enable Colors

Snazzy is disabled by default, because not all terminals and platforms support ANSI codes, resulting in ugly text.
Also, when output is redirected to log files, we want to suppress those escape sequences.
Finally, a command line tool that uses snazzy might want to offer a command line argument --no-color to disable colors:

if not args.no_color:
    snazzy.enable_colors()

Until explicitly enabled, no escape sequencrs are generated, so the the wrappers behave transparently:

from snazzy import red, enable_colors

assert red("error") == "error"

enable_colors(True)
assert red("error") == "\x1b[91merror\x1b[39m"

Emojis

The emoji(s, fallback) method allows to emit emojis and other fancy unicode characters, but fallback to a replacement string if the terminal does not support this.

print("{} this is a bug.".format(emoji("❌", red("X"))))
print(emoji("✨ 🍰 ✨", ":-)"))

Note: Currently we assume that Windows does not support emojis, but other terminals do.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snazzy-0.2.2.tar.gz (8.1 kB view hashes)

Uploaded Source

Built Distribution

snazzy-0.2.2-py3-none-any.whl (7.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page