Created
October 8, 2021 14:31
-
-
Save Pistos/3a6b406b60bf78a56c32512d12330c07 to your computer and use it in GitHub Desktop.
Modifications to fzf keybindings (zsh) for Ctrl-R to allow Space and Ctrl-E to select but not execute selection
This file contains hidden or 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 --expect=ctrl-e --expect=space $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) | |
local ret=$? | |
if [ -n "$selected" ]; then | |
local accept=0 | |
if [[ $selected[1] = ctrl-e ]]; then | |
accept=1 | |
shift selected | |
fi | |
if [[ $selected[1] = space ]]; then | |
accept=2 | |
shift selected | |
fi | |
num=$selected[1] | |
if [ -n "$num" ]; then | |
zle vi-fetch-history -n $num | |
[[ $accept = 0 ]] && zle accept-line | |
[[ $accept = 2 ]] && LBUFFER="$LBUFFER " | |
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' | |
} |
This file contains hidden or 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
@@ -94,12 +94,23 @@ | |
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)) ) | |
+ FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore --expect=ctrl-e --expect=space $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) | |
local ret=$? | |
if [ -n "$selected" ]; then | |
+ local accept=0 | |
+ if [[ $selected[1] = ctrl-e ]]; then | |
+ accept=1 | |
+ shift selected | |
+ fi | |
+ if [[ $selected[1] = space ]]; then | |
+ accept=2 | |
+ shift selected | |
+ fi | |
num=$selected[1] | |
if [ -n "$num" ]; then | |
zle vi-fetch-history -n $num | |
+ [[ $accept = 0 ]] && zle accept-line | |
+ [[ $accept = 2 ]] && LBUFFER="$LBUFFER " | |
fi | |
fi | |
zle reset-prompt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment