blob: 13b285d1e9adabe4a10f989fdf3c99a1d5020c53 [file] [log] [blame] [edit]
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""A minimal ANSI escape code library."""
import sys
# Reset terminal colour.
_RESET = "\033[0;0m"
# Wrap the string "s" with the given code and a reset prefix.
#
# Returns the string unmodified if stdout is not attached to a terminal.
def wrap(code: str, s: str) -> str:
if not sys.stdout.isatty():
# Being piped.
return s
return "%s%s%s" % (code, s, _RESET)
# Emit a Select Graphic Rendition (SGR) ANSI code.
def sgr(*codes: int) -> str:
return "\033[%sm" % (";".join(str(c) for c in codes))
# Wrap the string with a color.
def red(s: str) -> str:
return wrap(sgr(31), s)
def green(s: str) -> str:
return wrap(sgr(32), s)
def yellow(s: str) -> str:
return wrap(sgr(33), s)
def gray(s: str) -> str:
return wrap(sgr(90), s)
def bright_green(s: str) -> str:
return wrap(sgr(1, 32), s)