aboutsummaryrefslogtreecommitdiffhomepage
path: root/zsh/key-bindings.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'zsh/key-bindings.zsh')
-rw-r--r--zsh/key-bindings.zsh123
1 files changed, 123 insertions, 0 deletions
diff --git a/zsh/key-bindings.zsh b/zsh/key-bindings.zsh
new file mode 100644
index 0000000..ab77e52
--- /dev/null
+++ b/zsh/key-bindings.zsh
@@ -0,0 +1,123 @@
1# ____ ____
2# / __/___ / __/
3# / /_/_ / / /_
4# / __/ / /_/ __/
5# /_/ /___/_/ key-bindings.zsh
6#
7# - $FZF_TMUX_OPTS
8# - $FZF_CTRL_T_COMMAND
9# - $FZF_CTRL_T_OPTS
10# - $FZF_CTRL_R_OPTS
11# - $FZF_ALT_C_COMMAND
12# - $FZF_ALT_C_OPTS
13
14# Key bindings
15# ------------
16
17# The code at the top and the bottom of this file is the same as in completion.zsh.
18# Refer to that file for explanation.
19if 'zmodload' 'zsh/parameter' 2>'/dev/null' && (( ${+options} )); then
20 __fzf_key_bindings_options="options=(${(j: :)${(kv)options[@]}})"
21else
22 () {
23 __fzf_key_bindings_options="setopt"
24 'local' '__fzf_opt'
25 for __fzf_opt in "${(@)${(@f)$(set -o)}%% *}"; do
26 if [[ -o "$__fzf_opt" ]]; then
27 __fzf_key_bindings_options+=" -o $__fzf_opt"
28 else
29 __fzf_key_bindings_options+=" +o $__fzf_opt"
30 fi
31 done
32 }
33fi
34
35'emulate' 'zsh' '-o' 'no_aliases'
36
37{
38
39[[ -o interactive ]] || return 0
40
41# CTRL-T - Paste the selected file path(s) into the command line
42__fsel() {
43 local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
44 -o -type f -print \
45 -o -type d -print \
46 -o -type l -print 2> /dev/null | cut -b3-"}"
47 setopt localoptions pipefail no_aliases 2> /dev/null
48 local item
49 eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read item; do
50 echo -n "${(q)item} "
51 done
52 local ret=$?
53 echo
54 return $ret
55}
56
57__fzfcmd() {
58 [ -n "$TMUX_PANE" ] && { [ "${FZF_TMUX:-0}" != 0 ] || [ -n "$FZF_TMUX_OPTS" ]; } &&
59 echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
60}
61
62fzf-file-widget() {
63 LBUFFER="${LBUFFER}$(__fsel)"
64 local ret=$?
65 zle reset-prompt
66 return $ret
67}
68zle -N fzf-file-widget
69bindkey -M emacs '^T' fzf-file-widget
70bindkey -M vicmd '^T' fzf-file-widget
71bindkey -M viins '^T' fzf-file-widget
72
73# ALT-C - cd into the selected directory
74fzf-cd-widget() {
75 local cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
76 -o -type d -print 2> /dev/null | cut -b3-"}"
77 setopt localoptions pipefail no_aliases 2> /dev/null
78 local dir="$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) +m)"
79 if [[ -z "$dir" ]]; then
80 zle redisplay
81 return 0
82 fi
83 zle push-line # Clear buffer. Auto-restored on next prompt.
84 BUFFER="builtin cd -- ${(q)dir}"
85 zle accept-line
86 local ret=$?
87 unset dir # ensure this doesn't end up appearing in prompt expansion
88 zle reset-prompt
89 return $ret
90}
91zle -N fzf-cd-widget
92bindkey -M emacs '\ec' fzf-cd-widget
93bindkey -M vicmd '\ec' fzf-cd-widget
94bindkey -M viins '\ec' fzf-cd-widget
95
96# CTRL-R - Paste the selected command from history into the command line
97fzf-history-widget() {
98 local selected num
99 setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null
100 selected=( $(fc -rl 1 | awk '{ cmd=$0; sub(/^[ \t]*[0-9]+\**[ \t]+/, "", cmd); if (!seen[cmd]++) print $0 }' |
101 FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) )
102 local ret=$?
103 if [ -n "$selected" ]; then
104 num=$selected[1]
105 zle insert-last-word -- $selected
106 if [[ "$num" =~ '^[0-9]+$' ]]; then
107 zle vi-fetch-history -n $num
108 else
109 BUFFER="$selected " && zle end-of-line
110 fi
111 fi
112 zle reset-prompt
113 return $ret
114}
115zle -N fzf-history-widget
116bindkey -M emacs '^R' fzf-history-widget
117bindkey -M vicmd '^R' fzf-history-widget
118bindkey -M viins '^R' fzf-history-widget
119
120} always {
121 eval $__fzf_key_bindings_options
122 'unset' '__fzf_key_bindings_options'
123}