From 4c2d7db69ba8217cff75d5096cec661998fee80e Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 28 Mar 2026 18:07:47 +0100 Subject: [PATCH 1/2] toolbox: Preview-Felder base64-kodieren um fzf Word-Splitting zu verhindern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beschreibungstexte mit Leerzeichen und Zeilenumbrüche wurden durch fzf word-gesplittet: Eintraege landeten in der Auswahlliste, printf-Cycling zerlegte den Preview-Text Wort fuer Wort. Fix: name, raw_preview und details als Base64 in den fzf-Feldern speichern (kein Leerzeichen → kein Splitting), im Preview-Befehl per base64 -d dekodieren. Shell-Quoted-Context per echten "-Zeichen (kein Raw-String) sichert auch die Ausgabe von $(…) gegen nachtraegliches Splitting. --- bin/toolbox | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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( From b8337f2762cf93edf755b1feb85aa83a7bbdeffc Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 2 Apr 2026 16:27:15 +0200 Subject: [PATCH 2/2] cb-Alias: Linux-kompatibel via xclip (macOS bleibt pbpaste/pbcopy) --- zsh/.zshrc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zsh/.zshrc b/zsh/.zshrc index d3467a6..1e49040 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -75,7 +75,11 @@ alias gp='git push' alias gl='git log --oneline --graph --decorate' alias gitcheck="~/git-check-all.sh --short" alias gitupdate="~/git-update-all.sh" -alias cb="pbpaste | sed 's/^ //' | pbcopy" +if [[ "$OSTYPE" == "darwin"* ]]; then + alias cb="pbpaste | sed 's/^ //' | pbcopy" +else + alias cb="xclip -selection clipboard -o | sed 's/^ //' | xclip -selection clipboard -i" +fi # Ubuntu-Kompatibilitaet: fd und bat heissen dort anders command -v fdfind &>/dev/null && ! command -v fd &>/dev/null && alias fd='fdfind' command -v batcat &>/dev/null && ! command -v bat &>/dev/null && alias bat='batcat'