Created
May 21, 2021 06:53
-
-
Save shuax/977d09912f3dc7c5d247d3359c5352ca to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ____ ____ | |
# / __/___ / __/ | |
# / /_/_ / / /_ | |
# / __/ / /_/ __/ | |
# /_/ /___/_/ key-bindings.zsh | |
# | |
# - $FZF_TMUX_OPTS | |
# - $FZF_CTRL_T_COMMAND | |
# - $FZF_CTRL_T_OPTS | |
# - $FZF_CTRL_R_OPTS | |
# - $FZF_ALT_C_COMMAND | |
# - $FZF_ALT_C_OPTS | |
# Key bindings | |
# ------------ | |
# The code at the top and the bottom of this file is the same as in completion.zsh. | |
# Refer to that file for explanation. | |
if 'zmodload' 'zsh/parameter' 2>'/dev/null' && (( ${+options} )); then | |
__fzf_key_bindings_options="options=(${(j: :)${(kv)options[@]}})" | |
else | |
() { | |
__fzf_key_bindings_options="setopt" | |
'local' '__fzf_opt' | |
for __fzf_opt in "${(@)${(@f)$(set -o)}%% *}"; do | |
if [[ -o "$__fzf_opt" ]]; then | |
__fzf_key_bindings_options+=" -o $__fzf_opt" | |
else | |
__fzf_key_bindings_options+=" +o $__fzf_opt" | |
fi | |
done | |
} | |
fi | |
'emulate' 'zsh' '-o' 'no_aliases' | |
{ | |
[[ -o interactive ]] || return 0 | |
# CTRL-T - Paste the selected file path(s) into the command line | |
__fsel() { | |
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 \ | |
-o -type f -print \ | |
-o -type d -print \ | |
-o -type l -print 2> /dev/null | cut -b3-"}" | |
setopt localoptions pipefail no_aliases 2> /dev/null | |
local item | |
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 | |
echo -n "${(q)item} " | |
done | |
local ret=$? | |
echo | |
return $ret | |
} | |
__fzfcmd() { | |
[ -n "$TMUX_PANE" ] && { [ "${FZF_TMUX:-0}" != 0 ] || [ -n "$FZF_TMUX_OPTS" ]; } && | |
echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf" | |
} | |
fzf-file-widget() { | |
LBUFFER="${LBUFFER}$(__fsel)" | |
local ret=$? | |
zle reset-prompt | |
return $ret | |
} | |
zle -N fzf-file-widget | |
bindkey '^T' fzf-file-widget | |
# ALT-C - cd into the selected directory | |
fzf-cd-widget() { | |
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 \ | |
-o -type d -print 2> /dev/null | cut -b3-"}" | |
setopt localoptions pipefail no_aliases 2> /dev/null | |
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)" | |
if [[ -z "$dir" ]]; then | |
zle redisplay | |
return 0 | |
fi | |
zle push-line # Clear buffer. Auto-restored on next prompt. | |
BUFFER="cd ${(q)dir}" | |
zle accept-line | |
local ret=$? | |
unset dir # ensure this doesn't end up appearing in prompt expansion | |
zle reset-prompt | |
return $ret | |
} | |
zle -N fzf-cd-widget | |
bindkey '\ec' fzf-cd-widget | |
# CTRL-R - Paste the selected command from history into the command line | |
fzf-history-widget() { | |
local selected num | |
setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null | |
# selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, $1)}++' | | |
# FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) | |
selected=( $(fc -l 1 | eval "$(__fzfcmd) +s --tac +m -n2..,.. --tiebreak=index --toggle-sort=ctrl-r --expect=tab $FZF_CTRL_R_OPTS -q ${(q)LBUFFER}") ) | |
local ret=$? | |
if [ -n "$selected" ]; then | |
local accept=0 | |
if [[ $selected[1] = tab ]]; then | |
accept=1 | |
shift selected | |
fi | |
num=$selected[1] | |
if [ -n "$num" ]; then | |
zle vi-fetch-history -n $num | |
[[ $accept = 0 ]] && zle accept-line | |
fi | |
fi | |
zle reset-prompt | |
return $ret | |
} | |
zle -N fzf-history-widget | |
bindkey '^R' fzf-history-widget | |
} always { | |
eval $__fzf_key_bindings_options | |
'unset' '__fzf_key_bindings_options' | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment