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