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.
This commit is contained in:
parent
2f731f68e2
commit
4c2d7db69b
1 changed files with 13 additions and 6 deletions
19
bin/toolbox
19
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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue