summaryrefslogtreecommitdiff
path: root/lib/spack/llnl/util/tty/color.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/llnl/util/tty/color.py')
-rw-r--r--lib/spack/llnl/util/tty/color.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/spack/llnl/util/tty/color.py b/lib/spack/llnl/util/tty/color.py
index 67bd129eab..6a1d73cb16 100644
--- a/lib/spack/llnl/util/tty/color.py
+++ b/lib/spack/llnl/util/tty/color.py
@@ -204,17 +204,23 @@ def color_when(value):
class match_to_ansi:
- def __init__(self, color=True, enclose=False):
+ def __init__(self, color=True, enclose=False, zsh=False):
self.color = _color_when_value(color)
self.enclose = enclose
+ self.zsh = zsh
def escape(self, s):
"""Returns a TTY escape sequence for a color"""
if self.color:
- if self.enclose:
- return r"\[\033[%sm\]" % s
+ if self.zsh:
+ result = rf"\e[0;{s}m"
else:
- return "\033[%sm" % s
+ result = f"\033[{s}m"
+
+ if self.enclose:
+ result = rf"\[{result}\]"
+
+ return result
else:
return ""
@@ -261,9 +267,11 @@ def colorize(string, **kwargs):
codes, for output to non-console devices.
enclose (bool): If True, enclose ansi color sequences with
square brackets to prevent misestimation of terminal width.
+ zsh (bool): If True, use zsh ansi codes instead of bash ones (for variables like PS1)
"""
color = _color_when_value(kwargs.get("color", get_color_when()))
- string = re.sub(color_re, match_to_ansi(color, kwargs.get("enclose")), string)
+ zsh = kwargs.get("zsh", False)
+ string = re.sub(color_re, match_to_ansi(color, kwargs.get("enclose")), string, zsh)
string = string.replace("}}", "}")
return string