1
0
dotfiles/.config/zsh/rc/keyboard.zsh

139 lines
3.8 KiB
Bash

#!/bin/zsh
typeset -A ZSHU_TI_KEYS
typeset -A ZSHU_FB_KEYS
if z-ti-test smkx rmkx ; then
zle-line-init() { emulate -L zsh ; echoti smkx ; }
zle-line-finish() { emulate -L zsh ; echoti rmkx ; }
# zle-line-init() { echoti smkx ; }
# zle-line-finish() { echoti rmkx ; }
zle -N zle-line-init
zle -N zle-line-finish
fi
## key [sequence] via terminfo
z-kseq-ti() {
[ -z "$1" ] && return
[ -z "$2" ] && return
z-ti-test "$2" && ZSHU_TI_KEYS[${terminfo[$2]}]=$1
}
## key [sequence] via fallback
z-kseq-fb() {
[ -z "$1" ] && return
[ -z "$2" ] && return
ZSHU_FB_KEYS[$2]=$1
}
z-kseq-ti Backspace kbs
z-kseq-ti Home khome
z-kseq-ti End kend
z-kseq-ti Insert kich1
z-kseq-ti Delete kdch1
z-kseq-ti Up kcuu1
z-kseq-ti Down kcud1
z-kseq-ti Left kcub1
z-kseq-ti Right kcuf1
z-kseq-ti PageUp kpp
z-kseq-ti PageDown knp
z-kseq-ti Shift-Tab kcbt
z-kseq-fb Backspace '^?'
z-kseq-fb Home '^[[H'
z-kseq-fb End '^[[F'
z-kseq-fb Insert '^[[2~'
z-kseq-fb Delete '^[[3~'
z-kseq-fb Delete # '^[3;5~'
z-kseq-fb Up '^[[A'
z-kseq-fb Down '^[[B'
z-kseq-fb Left '^[[D'
z-kseq-fb Right '^[[C'
z-kseq-fb PageUp '^[[5~'
z-kseq-fb PageDown '^[[6~'
z-kseq-fb Ctrl-Delete '^[[3;5~'
z-kseq-fb Ctrl-RightArrow '^[[1;5C'
z-kseq-fb Ctrl-LeftArrow '^[[1;5D'
z-kseq-fb Esc-w '\ew'
z-bind () {
local -a maps
local -Ua keys
local widget i k
while [ "$1" != "--" ] ; do
maps+=( "$1" )
shift
done
shift
widget="$2"
keys+=( ${(k)ZSHU_TI_KEYS[(r)$1]} )
keys+=( ${(k)ZSHU_FB_KEYS[(r)$1]} )
[ ${#keys} -eq 0 ] && return 1
case "${widget}" in
/*)
widget=${widget:1}
emulate zsh -c "autoload -RUz ${widget}"
zle -N "${widget}"
;;
esac
for i in "${maps[@]}" ; do
for k in "${keys[@]}" ; do
bindkey -M "$i" "$k" "${widget}"
done
done
}
z-bind emacs -- Backspace backward-delete-char
z-bind viins -- Backspace vi-backward-delete-char
z-bind vicmd -- Backspace vi-backward-char
z-bind emacs -- Home beginning-of-line
z-bind viins vicmd -- Home vi-beginning-of-line
z-bind emacs -- End end-of-line
z-bind viins vicmd -- End vi-end-of-line
z-bind emacs viins -- Insert overwrite-mode
z-bind vicmd -- Insert vi-insert
z-bind emacs -- Delete delete-char
z-bind viins vicmd -- Delete vi-delete-char
z-bind emacs viins vicmd -- Up /up-line-or-beginning-search
z-bind emacs viins vicmd -- Down /down-line-or-beginning-search
z-bind emacs -- Left backward-char
z-bind viins vicmd -- Left vi-backward-char
z-bind emacs -- Right forward-char
z-bind viins vicmd -- Right vi-forward-char
z-bind emacs viins vicmd -- PageUp up-line-or-history
z-bind emacs viins vicmd -- PageDown down-line-or-history
z-bind emacs viins vicmd -- Shift-Tab reverse-menu-complete
z-bind emacs viins vicmd -- Ctrl-Delete kill-word
z-bind emacs -- Ctrl-RightArrow forward-word
z-bind viins vicmd -- Ctrl-RightArrow vi-forward-word
z-bind emacs -- Ctrl-LeftArrow backward-word
z-bind viins vicmd -- Ctrl-LeftArrow vi-backward-word
z-bind emacs viins vicmd -- Esc-w kill-region
## use emacs key bindings
bindkey -e
for i ( /usr/share/doc/fzf/examples/key-bindings.zsh ) ; do
[ -s "$i" ] || continue
source "$i"
done ; unset i