From 78611457f2a95aa2dd24904486f9a77a0ae30364 Mon Sep 17 00:00:00 2001 From: Eric Nielsen Date: Fri, 13 Apr 2018 15:23:53 -0500 Subject: [PATCH] [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. --- modules/input/init.zsh | 96 +++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 57 deletions(-) diff --git a/modules/input/init.zsh b/modules/input/init.zsh index 17d5b32..ba05053 100644 --- a/modules/input/init.zsh +++ b/modules/input/init.zsh @@ -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 @@ -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