123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #
- # Editor and input char assignment
- #
- # Return if requirements are not found.
- if [[ ${TERM} == 'dumb' ]]; then
- return 1
- fi
- # Use human-friendly identifiers.
- zmodload -F zsh/terminfo +b:echoti +p:terminfo
- typeset -gA key_info
- key_info=(
- 'Control' '\C-'
- 'ControlLeft' '\e[1;5D \e[5D \e\e[D \eOd \eOD'
- 'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc \eOC'
- 'Escape' '\e'
- 'Meta' '\M-'
- '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
- local key
- for key (${(s: :)key_info[ControlLeft]}) bindkey ${key} backward-word
- for key (${(s: :)key_info[ControlRight]}) bindkey ${key} forward-word
- [[ -n ${key_info[Home]} ]] && bindkey ${key_info[Home]} beginning-of-line
- [[ -n ${key_info[End]} ]] && bindkey ${key_info[End]} end-of-line
- [[ -n ${key_info[PageUp]} ]] && bindkey ${key_info[PageUp]} up-line-or-history
- [[ -n ${key_info[PageDown]} ]] && bindkey ${key_info[PageDown]} down-line-or-history
- [[ -n ${key_info[Insert]} ]] && bindkey ${key_info[Insert]} overwrite-mode
- if [[ ${zdouble_dot_expand} == 'true' ]]; then
- double-dot-expand() {
- if [[ ${LBUFFER} == *.. ]]; then
- LBUFFER+='/..'
- else
- LBUFFER+='.'
- fi
- }
- zle -N double-dot-expand
- bindkey '.' double-dot-expand
- fi
- [[ -n ${key_info[Backspace]} ]] && bindkey ${key_info[Backspace]} backward-delete-char
- [[ -n ${key_info[Delete]} ]] && bindkey ${key_info[Delete]} delete-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
- # Clear
- bindkey "${key_info[Control]}L" clear-screen
- # Bind Shift + Tab to go to the previous menu item.
- [[ -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>
- expand-or-complete-with-redisplay() {
- print -Pn '...'
- zle expand-or-complete
- zle redisplay
- }
- zle -N expand-or-complete-with-redisplay
- bindkey "${key_info[Control]}I" expand-or-complete-with-redisplay
- fi
- # Put into application mode and validate ${terminfo}
- zle-line-init() {
- (( ${+terminfo[smkx]} )) && echoti smkx
- }
- zle-line-finish() {
- (( ${+terminfo[rmkx]} )) && echoti rmkx
- }
- zle -N zle-line-init
- zle -N zle-line-finish
|