foxshell/fn/-z4h-fzf
2025-07-04 11:48:40 -05:00

64 lines
1.2 KiB
Bash

#!/usr/bin/env zsh
eval "$_z4h_opt"
local widget=${WIDGET#z4h-}
local -a cmd flags bindings
zstyle -a :z4h:$widget fzf-command cmd || cmd=($Z4H/fzf/bin/fzf)
zstyle -a :z4h:$widget fzf-flags flags || flags=()
zstyle -a :z4h:$widget fzf-bindings bindings || bindings=()
local -A keys=(
ctrl-h backward-kill-word
alt-j clear-query
ctrl-u clear-query
ctrl-k kill-line
alt-k unix-line-discard
ctrl-space toggle-out
ctrl-a toggle-all
)
if (( ${@[(I)--layout=default]} )); then
keys+=(
tab up
btab down
ctrl-r up
ctrl-s down
)
else
keys+=(
tab down
btab up
ctrl-r down
ctrl-s up
)
fi
local kv
for kv in $bindings; do
kv=(${(s.:.)kv})
(( $#kv == 2 )) || continue
keys[$kv[1]]=$kv[2]
done
local k v
local -i expect
for k v in ${(kv)keys}; do
if [[ +$v+ == *+repeat+* ]]; then
flags=(--expect=$k "${flags[@]}")
expect=1
if [[ $v == repeat(|+*) ]]; then
keys[$k]=ignore
else
keys[$k]=${v%%+repeat(|+*)}
fi
fi
done
local keymap
printf -v keymap '%s:%s,' ${(kv)keys}
local out=$("${cmd[@]}" "$@" --bind=${keymap%,} "${flags[@]}")
[[ -n $out ]] || return
(( expect )) || print
print -r -- $out