54 lines
1.2 KiB
Bash
54 lines
1.2 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
eval "$_z4h_opt"
|
|
|
|
zparseopts -D -F -- || return '_z4h_err()'
|
|
|
|
if (( ARGC < 2 )); then
|
|
-z4h-help-bindkey >&2
|
|
return 1
|
|
fi
|
|
|
|
(( ${+_z4h_key} )) || return 0
|
|
|
|
local kb seq seqs new_seqs
|
|
|
|
for kb in ${@:2}; do
|
|
seqs=('')
|
|
for kb in ${(@s: :)kb}; do
|
|
if [[ -n ${seq::=$_z4h_key[$kb]} ]]; then
|
|
seqs=(${^seqs}$seq)
|
|
else
|
|
case $kb in
|
|
?~[a-z])
|
|
seqs=(${^seqs}$kb ${^seqs}${(L)kb})
|
|
;;
|
|
Ctrl+[A-Z'[]\'])
|
|
seqs=(${^seqs}'^'$kb[-1])
|
|
;;
|
|
(Alt|Option)+[A-Z'[]\/.,'])
|
|
new_seqs=(${^seqs}'^['$kb[-1] ${^seqs}'^['${(L)kb[-1]})
|
|
if zstyle -T :z4h:bindkey macos-option-as-alt &&
|
|
[[ -n ${seq::=$_z4h_macos_opt_key[$kb[-1]]} ]]; then
|
|
new_seqs+=(${^seqs}$seq)
|
|
if [[ -n ${seq::=$_z4h_macos_opt_key[${(L)kb[-1]}]} ]]; then
|
|
new_seqs+=(${^seqs}$seq)
|
|
fi
|
|
fi
|
|
seqs=($new_seqs)
|
|
;;
|
|
Ctrl+(Alt|Option)+[A-Z'[]\'])
|
|
seqs=(${^seqs}'^[^'$kb[-1])
|
|
;;
|
|
*)
|
|
print -Pru2 -- '%F{3}z4h%f: invalid key binding: %F{1}'${kb//\%/%%}'%f'
|
|
return '_z4h_err()'
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
done
|
|
|
|
for seq in ${(u)seqs}; do
|
|
builtin bindkey -- $seq $1
|
|
done
|