Compare commits

...

2 commits

Author SHA1 Message Date
b8337f2762 cb-Alias: Linux-kompatibel via xclip (macOS bleibt pbpaste/pbcopy) 2026-04-02 16:27:22 +02:00
4c2d7db69b toolbox: Preview-Felder base64-kodieren um fzf Word-Splitting zu verhindern
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.
2026-04-02 16:27:22 +02:00
2 changed files with 18 additions and 7 deletions

View file

@ -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(

View file

@ -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'