64 lines
1.6 KiB
Bash
64 lines
1.6 KiB
Bash
#!/bin/zsh
|
|
zmodload zsh/complist
|
|
zmodload -F zsh/terminfo p:terminfo
|
|
|
|
local -Pa prefix=( '\e'{\[,O} )
|
|
local -Pa key_up=( ${^prefix}A )
|
|
local -Pa key_down=( ${^prefix}B )
|
|
local -Pa key_alt_up=( '\e'$^key_up '\e[1;3A' )
|
|
local -Pa key_alt_down=( '\e'$^key_down '\e[1;3B' )
|
|
|
|
local -A main=() emacs=() vicmd=() menukeys=()
|
|
|
|
${0}:bind() {
|
|
local -P key= widget=$1 menuwidget=$2
|
|
|
|
emacs[$3]=$widget
|
|
menukeys[$3]=$menuwidget
|
|
|
|
vicmd[$4]=$widget
|
|
key="^[$4"
|
|
menukeys[$key]=$menuwidget
|
|
|
|
shift 4
|
|
for key; do
|
|
main[$key]=$widget
|
|
menukeys[$key]=$menuwidget
|
|
done
|
|
}
|
|
|
|
${0}:bind up-line-or-search up-history '^P' 'k' $key_up[@]
|
|
${0}:bind down-line-or-select down-history '^N' 'j' $key_down[@]
|
|
|
|
${0}:bind history-search-backward vi-backward-blank-word '\ep' '^P' $key_alt_up[@]
|
|
${0}:bind menu-select vi-forward-blank-word '\en' '^N' $key_alt_down[@]
|
|
|
|
${0}:bind history-incremental-search-backward history-incremental-search-backward '^R' '/'
|
|
${0}:bind menu-search history-incremental-search-forward '^S' '?'
|
|
|
|
#local backtab=$terminfo[kcbt]
|
|
|
|
menukeys+=(
|
|
'\t' menu-complete
|
|
# "$backtab" reverse-menu-complete
|
|
'^@' accept-and-hold
|
|
'^[v' accept-and-hold
|
|
'^_' undo
|
|
'^[u' undo
|
|
"$terminfo[kpp]" backward-word
|
|
"$terminfo[knp]" forward-word
|
|
)
|
|
main+=(
|
|
'\t' complete-word
|
|
# "$backtab" expand-word
|
|
)
|
|
emacs+=(
|
|
'^X/' recent-paths
|
|
)
|
|
|
|
bindkey -M main "${(kv@)main}"
|
|
bindkey -M emacs "${(kv@)emacs}"
|
|
bindkey -M vicmd "${(kv@)vicmd}"
|
|
bindkey -M menuselect "${(kv@)menukeys}"
|
|
|
|
unfunction ${0}:bind
|