diff --git a/bin/toolbox b/bin/toolbox index 67007f2..4e2534d 100755 --- a/bin/toolbox +++ b/bin/toolbox @@ -11,6 +11,7 @@ import os import platform import shlex import json +import base64 from dataclasses import dataclass IS_MAC = platform.system() == "Darwin" @@ -858,15 +859,21 @@ def main() -> None: desc_col = f"{DIM}{t.description}{RST}{BADGE}" raw_preview = f"⚠ {get_install_cmd(t)}" - # Felder: display_name | display_desc | raw_name | raw_preview | idx:status | details - line = (f"{name_col}\t{desc_col}\t{t.name}\t{raw_preview}" - f"\t{i}:{'avail' if avail else 'missing'}\t{t.details}") + # Felder: display_name | display_desc | name_b64 | preview_b64 | idx:status | details_b64 + # Alle Preview-Felder als Base64: kein Leerzeichen → kein Word-Splitting durch fzf + name_b64 = base64.b64encode(t.name.encode()).decode() + preview_b64 = base64.b64encode(raw_preview.encode()).decode() + details_b64 = base64.b64encode(t.details.encode()).decode() + line = (f"{name_col}\t{desc_col}\t{name_b64}\t{preview_b64}" + f"\t{i}:{'avail' if avail else 'missing'}\t{details_b64}") tool_lines.append(line) - # Preview: Name (bold) + Details + Befehl/Install (gelb) + # Preview: alle Felder base64-kodiert → sicheres Dekodieren ohne Word-Splitting + # Normaler Python-String (kein r""), damit \" → " wird (echter Shell-Quoted-Context) preview = ( - r"printf '\n \033[1m%s\033[0m\n\n%s\n\n \033[33m%s\033[0m\n' " - r"'{3}' '{6}' '{4}'" + "printf '\\n \\033[1m%s\\033[0m\\n\\n' \"$(printf '%s' {3} | base64 -d)\"; " + "printf '%s' {6} | base64 -d; " + "printf '\\n\\n \\033[33m%s\\033[0m\\n' \"$(printf '%s' {4} | base64 -d)\"" ) key, chosen = fzf_run_keyed(