mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +00:00
44 lines
1.3 KiB
Bash
44 lines
1.3 KiB
Bash
#!/bin/sh
|
|||
|
|
# Fuzzy find and execute a Fabric pattern.
|
||
|
|
json_file=$HOME/.config/fabric/pattern_explainations.json
|
||
|
|
|
||
|
|
if [ ! -f "$json_file" ]; then
|
||
|
|
printf '\033[31mError: %s not found.\033[0m\n' "$json_file" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# fabric is aliased to fabric-ai in the shells; resolve the real binary here
|
||
|
|
if command -v fabric-ai >/dev/null 2>&1; then
|
||
|
|
fabric_bin=fabric-ai
|
||
|
|
else
|
||
|
|
fabric_bin=fabric
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 1. Safely capture piped input (if any) to a temp file — preserves all
|
||
|
|
# formatting and newlines, avoids variable escaping issues
|
||
|
|
temp_input=$(mktemp)
|
||
|
|
trap 'rm -f "$temp_input"' EXIT INT TERM
|
||
|
|
|
||
|
|
if [ ! -t 0 ]; then
|
||
|
|
cat > "$temp_input"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 2. Parse JSON to TSV -> fzf (name in list, description in preview)
|
||
|
|
selection=$(jq -r '.[] | "\(.name)\t\(.description)"' "$json_file" \
|
||
|
|
| fzf --delimiter '\t' \
|
||
|
|
--with-nth 1 \
|
||
|
|
--preview 'echo {2}' \
|
||
|
|
--preview-window 'right:60%:wrap' \
|
||
|
|
--prompt 'Pattern > ' \
|
||
|
|
--info inline \
|
||
|
|
--bind 'ctrl-/:toggle-preview')
|
||
|
|
|
||
|
|
# 3. Execute with or without the piped data
|
||
|
|
if [ -n "$selection" ]; then
|
||
|
|
pattern=$(printf '%s\n' "$selection" | cut -f1)
|
||
|
|
if [ -s "$temp_input" ]; then
|
||
|
|
"$fabric_bin" --pattern "$pattern" < "$temp_input"
|
||
|
|
else
|
||
|
|
"$fabric_bin" --pattern "$pattern"
|
||
|
|
fi
|
||
|
|
fi
|