64 lines
1.2 KiB
Bash
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
|