From ac0162aba7405f87f17cfd99c99f7d540482ee6c Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 16 Mar 2022 21:21:26 +0100 Subject: Improved color coding a bit. Added 5 more color options (not usable outside of 256-bit enabled terminals) --- archinstall/lib/output.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'archinstall/lib/output.py') diff --git a/archinstall/lib/output.py b/archinstall/lib/output.py index fa537dd4..da41d16d 100644 --- a/archinstall/lib/output.py +++ b/archinstall/lib/output.py @@ -47,26 +47,47 @@ def supports_color() -> bool: # Heavily influenced by: https://github.com/django/django/blob/ae8338daf34fd746771e0678081999b656177bae/django/utils/termcolors.py#L13 # Color options here: https://askubuntu.com/questions/528928/how-to-do-underline-bold-italic-strikethrough-color-background-and-size-i -def stylize_output(text: str, *opts :str, **kwargs :Union[str, int, Dict[str, Union[str, int]]]) -> str: +def stylize_output(text: str, *opts :str, **kwargs) -> str: + """ + Adds styling to a text given a set of color arguments. + """ opt_dict = {'bold': '1', 'italic': '3', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'} - color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white') - foreground = {color_names[x]: '3%s' % x for x in range(8)} - background = {color_names[x]: '4%s' % x for x in range(8)} + colors = { + 'black' : '0', + 'red' : '1', + 'green' : '2', + 'yellow' : '3', + 'blue' : '4', + 'magenta' : '5', + 'cyan' : '6', + 'white' : '7', + 'orange' : '8;5;208', # Extended 256-bit colors (not always supported) + 'darkorange' : '8;5;202',# https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html#256-colors + 'gray' : '8;5;246', + 'darkgray' : '8;5;240', + 'lightgray' : '8;5;256' + } + foreground = {key: f'3{colors[key]}' for key in colors} + background = {key: f'4{colors[key]}' for key in colors} reset = '0' code_list = [] if text == '' and len(opts) == 1 and opts[0] == 'reset': return '\x1b[%sm' % reset + for k, v in kwargs.items(): if k == 'fg': code_list.append(foreground[str(v)]) elif k == 'bg': code_list.append(background[str(v)]) + for o in opts: if o in opt_dict: code_list.append(opt_dict[o]) + if 'noreset' not in opts: text = '%s\x1b[%sm' % (text or '', reset) + return '%s%s' % (('\x1b[%sm' % ';'.join(code_list)), text or '') -- cgit v1.2.3-54-g00ecf