summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2025-10-02 07:55:01 +0200
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2025-10-02 07:55:01 +0200
commitb5a9016d7f8fab817f83dec943c16a07d759ceac (patch)
tree60acb9c58e410fe6a16e7dc769b54033a5981ddb /.local
parente6a52090bfc67963f4cc5ce095a223e236dd809f (diff)
downloaddotfiles-b5a9016d7f8fab817f83dec943c16a07d759ceac.tar.xz
Refine 'zypper wassup' colors
De-emphasize distro version change.
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/zypper-wassup25
1 files changed, 19 insertions, 6 deletions
diff --git a/.local/bin/zypper-wassup b/.local/bin/zypper-wassup
index 100f0ea..37ebad0 100755
--- a/.local/bin/zypper-wassup
+++ b/.local/bin/zypper-wassup
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
from collections import defaultdict, namedtuple
+from collections.abc import Iterable
from enum import IntEnum
import re
from subprocess import run
@@ -77,26 +78,38 @@ class Sgr(IntEnum):
GREEN_FG = 32
-def colorize(text, *params):
+def colorize(text: str, params: Iterable[Sgr]) -> str:
prefix = '\N{ESCAPE}['
suffix = 'm'
reset = f'{prefix}{Sgr.RESET}{suffix}'
- param_list = ';'.join(map(format, params))
+ param_list = ';'.join(map(str, params))
return f'{prefix}{param_list}{suffix}{text}{reset}'
-def highlight_diff(old, new):
+def highlight_diff_part(old: str, new: str, codes: Iterable[Sgr]=()) -> (str, str):
for i, (o, n) in enumerate(zip(old, new)):
if o != n:
break
+ else:
+ # old == new, or new == old + suffix.
+ i += 1
- old = old[:i]+colorize(old[i:], Sgr.BOLD, Sgr.RED_FG)
- new = new[:i]+colorize(new[i:], Sgr.BOLD, Sgr.GREEN_FG)
+ old = old[:i]+colorize(old[i:], (Sgr.RED_FG,)+tuple(codes))
+ new = new[:i]+colorize(new[i:], (Sgr.GREEN_FG,)+tuple(codes))
return old, new
+def highlight_diff(old: str, new: str) -> (str, str):
+ old_pkgv, old_distv = old.split("-", maxsplit=1)
+ new_pkgv, new_distv = new.split("-", maxsplit=1)
+
+ old_pkgv, new_pkgv = highlight_diff_part(old_pkgv, new_pkgv, (Sgr.BOLD,))
+ old_distv, new_distv = highlight_diff_part(old_distv, new_distv)
+
+ return f"{old_pkgv}-{old_distv}", f"{new_pkgv}-{new_distv}"
+
def padding(string, width):
# Python's str.format does not skip over control sequences when
# computing how long a string is. Compute padding manually before
@@ -112,7 +125,7 @@ def print_header(widths, name):
name = name[:widths['package']-1]+'…'
print(COLUMN.join((
- colorize(name, Sgr.BOLD)+padding(name, widths['package']),
+ colorize(name, (Sgr.BOLD,))+padding(name, widths['package']),
' '*widths['old'],
' '*widths['new'],
)))