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

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