[input] Only load terminfo feature of zsh/terminfo

and use `-F` to check if the feature was not already loaded before.

Use terminfo elements for Backspace and Delete. Sort by terminfo element
keys.

Also simplify code, removing unnecessary double quotes, and replacing
if-then-fi with one command by one-liners.
This commit is contained in:
Eric Nielsen 2018-04-13 15:23:53 -05:00
parent 26dce76d28
commit 78611457f2

View file

@ -9,7 +9,7 @@ if [[ ${TERM} == 'dumb' ]]; then
fi
# Use human-friendly identifiers.
zmodload zsh/terminfo
zmodload -F zsh/terminfo +p:terminfo
typeset -gA key_info
key_info=(
'Control' '\C-'
@ -17,30 +17,30 @@ key_info=(
'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc \eOC'
'Escape' '\e'
'Meta' '\M-'
'Backspace' "^?"
'Delete' "^[[3~"
'F1' "${terminfo[kf1]}"
'F2' "${terminfo[kf2]}"
'F3' "${terminfo[kf3]}"
'F4' "${terminfo[kf4]}"
'F5' "${terminfo[kf5]}"
'F6' "${terminfo[kf6]}"
'F7' "${terminfo[kf7]}"
'F8' "${terminfo[kf8]}"
'F9' "${terminfo[kf9]}"
'F10' "${terminfo[kf10]}"
'F11' "${terminfo[kf11]}"
'F12' "${terminfo[kf12]}"
'Insert' "${terminfo[kich1]}"
'Home' "${terminfo[khome]}"
'PageUp' "${terminfo[kpp]}"
'End' "${terminfo[kend]}"
'PageDown' "${terminfo[knp]}"
'Up' "${terminfo[kcuu1]}"
'Left' "${terminfo[kcub1]}"
'Down' "${terminfo[kcud1]}"
'Right' "${terminfo[kcuf1]}"
'BackTab' "${terminfo[kcbt]}"
'Backspace' ${terminfo[kbs]}
'BackTab' ${terminfo[kcbt]}
'Left' ${terminfo[kcub1]}
'Down' ${terminfo[kcud1]}
'Right' ${terminfo[kcuf1]}
'Up' ${terminfo[kcuu1]}
'Delete' ${terminfo[kdch1]}
'End' ${terminfo[kend]}
'F1' ${terminfo[kf1]}
'F2' ${terminfo[kf2]}
'F3' ${terminfo[kf3]}
'F4' ${terminfo[kf4]}
'F5' ${terminfo[kf5]}
'F6' ${terminfo[kf6]}
'F7' ${terminfo[kf7]}
'F8' ${terminfo[kf8]}
'F9' ${terminfo[kf9]}
'F10' ${terminfo[kf10]}
'F11' ${terminfo[kf11]}
'F12' ${terminfo[kf12]}
'Home' ${terminfo[khome]}
'Insert' ${terminfo[kich1]}
'PageDown' ${terminfo[knp]}
'PageUp' ${terminfo[kpp]}
)
# Bind the keys
@ -53,27 +53,15 @@ for key in "${(s: :)key_info[ControlRight]}"; do
bindkey ${key} forward-word
done
if [[ -n "${key_info[Home]}" ]]; then
bindkey "${key_info[Home]}" beginning-of-line
fi
[[ -n ${key_info[Home]} ]] && bindkey ${key_info[Home]} beginning-of-line
[[ -n ${key_info[End]} ]] && bindkey ${key_info[End]} end-of-line
if [[ -n "${key_info[End]}" ]]; then
bindkey "${key_info[End]}" end-of-line
fi
[[ -n ${key_info[PageUp]} ]] && bindkey ${key_info[PageUp]} up-line-or-history
[[ -n ${key_info[PageDown]} ]] && bindkey ${key_info[PageDown]} down-line-or-history
if [[ -n "${key_info[PageUp]}" ]]; then
bindkey "${key_info[PageUp]}" up-line-or-history
fi
[[ -n ${key_info[Insert]} ]] && bindkey ${key_info[Insert]} overwrite-mode
if [[ -n "${key_info[PageDown]}" ]]; then
bindkey "${key_info[PageDown]}" down-line-or-history
fi
if [[ -n "${key_info[Insert]}" ]]; then
bindkey "${key_info[Insert]}" overwrite-mode
fi
if [[ ${zdouble_dot_expand} == "true" ]]; then
if [[ ${zdouble_dot_expand} == 'true' ]]; then
double-dot-expand() {
if [[ ${LBUFFER} == *.. ]]; then
LBUFFER+='/..'
@ -82,14 +70,14 @@ if [[ ${zdouble_dot_expand} == "true" ]]; then
fi
}
zle -N double-dot-expand
bindkey "." double-dot-expand
bindkey '.' double-dot-expand
fi
bindkey "${key_info[Delete]}" delete-char
bindkey "${key_info[Backspace]}" backward-delete-char
[[ -n ${key_info[Backspace]} ]] && bindkey ${key_info[Backspace]} backward-delete-char
[[ -n ${key_info[Delete]} ]] && bindkey ${key_info[Delete]} delete-char
bindkey "${key_info[Left]}" backward-char
bindkey "${key_info[Right]}" forward-char
[[ -n ${key_info[Left]} ]] && bindkey ${key_info[Left]} backward-char
[[ -n ${key_info[Right]} ]] && bindkey ${key_info[Right]} forward-char
# Expandpace.
bindkey ' ' magic-space
@ -98,9 +86,7 @@ bindkey ' ' magic-space
bindkey "${key_info[Control]}L" clear-screen
# Bind Shift + Tab to go to the previous menu item.
if [[ -n "${key_info[BackTab]}" ]]; then
bindkey "${key_info[BackTab]}" reverse-menu-complete
fi
[[ -n ${key_info[BackTab]} ]] && bindkey ${key_info[BackTab]} reverse-menu-complete
autoload -Uz is-at-least && if ! is-at-least 5.3; then
# Redisplay after completing, and avoid blank prompt after <Tab><Tab><Ctrl-C>
@ -115,14 +101,10 @@ fi
# Put into application mode and validate ${terminfo}
zle-line-init() {
if (( ${+terminfo[smkx]} )); then
echoti smkx
fi
(( ${+terminfo[smkx]} )) && echoti smkx
}
zle-line-finish() {
if (( ${+terminfo[rmkx]} )); then
echoti rmkx
fi
(( ${+terminfo[rmkx]} )) && echoti rmkx
}
zle -N zle-line-init
zle -N zle-line-finish