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 platform
|
||||||
import shlex
|
import shlex
|
||||||
import json
|
import json
|
||||||
|
import base64
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
IS_MAC = platform.system() == "Darwin"
|
IS_MAC = platform.system() == "Darwin"
|
||||||
|
|
@ -858,15 +859,21 @@ def main() -> None:
|
||||||
desc_col = f"{DIM}{t.description}{RST}{BADGE}"
|
desc_col = f"{DIM}{t.description}{RST}{BADGE}"
|
||||||
raw_preview = f"⚠ {get_install_cmd(t)}"
|
raw_preview = f"⚠ {get_install_cmd(t)}"
|
||||||
|
|
||||||
# Felder: display_name | display_desc | raw_name | raw_preview | idx:status | details
|
# Felder: display_name | display_desc | name_b64 | preview_b64 | idx:status | details_b64
|
||||||
line = (f"{name_col}\t{desc_col}\t{t.name}\t{raw_preview}"
|
# Alle Preview-Felder als Base64: kein Leerzeichen → kein Word-Splitting durch fzf
|
||||||
f"\t{i}:{'avail' if avail else 'missing'}\t{t.details}")
|
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)
|
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 = (
|
preview = (
|
||||||
r"printf '\n \033[1m%s\033[0m\n\n%s\n\n \033[33m%s\033[0m\n' "
|
"printf '\\n \\033[1m%s\\033[0m\\n\\n' \"$(printf '%s' {3} | base64 -d)\"; "
|
||||||
r"'{3}' '{6}' '{4}'"
|
"printf '%s' {6} | base64 -d; "
|
||||||
|
"printf '\\n\\n \\033[33m%s\\033[0m\\n' \"$(printf '%s' {4} | base64 -d)\""
|
||||||
)
|
)
|
||||||
|
|
||||||
key, chosen = fzf_run_keyed(
|
key, chosen = fzf_run_keyed(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue