This commit addresses a couple of issues:
1. fzf's `key-bindings.zsh` was sourced twice: Once in keys.zsh and once
via the symlink in `external-plugins/`. Fix this by removing the
source in `keys.zsh`.
2. The section about the fzf bindings in keys.zsh was a mess. Reorder
and rewrite some comments to make it nicer.
3. My just added custom `fzf-cd-inplace-widget` does not work like this.
Since `key-bindings.zsh` is sourced (was sourced again) after
`keys.zsh`, my override is overridden itself by the default. I
noticed and fixed this when I originally wrote and tested the
function, but unfortunately I forgot the old `bindkey` commands in
`keys.zsh`, which is why I now forgot about it and committed this
erroneously. To fix this, bind the keys after sourcing
`key-binding.zsh` in the newly added `fzf.key-bindings.config.zsh`.
Additionally, move the widget definition as well to have everything
at one place.
Fixes: 3cf445e739 (zsh:keys: Modify fzf's cd widget to be "in-prompt",
2025-08-06)
26 lines
975 B
Bash
26 lines
975 B
Bash
# Overwrite fzf's Alt-C binding to be "in-prompt"
|
|
|
|
# Modified version of
|
|
# https://github.com/junegunn/fzf/blame/f864f8b5f7ab/shell/key-bindings.zsh#L81-L99
|
|
# that changes the directory "in-prompt", meaning that the `cd` command is
|
|
# executed in the background with a prompt redraw instead of via `$BUFFER` and
|
|
# `accept-line`. This behavior is inspired by cd-{forward,backward} written by
|
|
# romkatv (see keys.zsh).
|
|
fzf-cd-inprompt-widget() {
|
|
setopt localoptions pipefail no_aliases 2>/dev/null
|
|
local dir="$(
|
|
FZF_DEFAULT_COMMAND=${FZF_ALT_C_COMMAND:-} \
|
|
FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --walker=dir,follow,hidden --scheme=path" "${FZF_ALT_C_OPTS-} +m") \
|
|
FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) < /dev/tty)"
|
|
if [[ -z "$dir" ]]; then
|
|
zle redisplay
|
|
return 0
|
|
fi
|
|
# --- modifications start here ---
|
|
pushd -q "$dir"
|
|
redraw-prompt
|
|
}
|
|
zle -N fzf-cd-inprompt-widget
|
|
bindkey -M vicmd '\ec' fzf-cd-inprompt-widget
|
|
bindkey -M viins '\ec' fzf-cd-inprompt-widget
|