-if ! hash fzf 2>/dev/null; then
- echo '`fzf` is not installed.'
- return
-fi
-
-# Auto-completion
-# ---------------
-if [[ -f /usr/share/zsh/site-functions/_fzf ]]; then
- source /usr/share/zsh/site-functions/_fzf
-fi
-
-# Key bindings
-# ------------
-
-# CTRL-T - Paste the selected file path(s) into the command line
-__fsel() {
- command find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
- -o -type f -print \
- -o -type d -print \
- -o -type l -print 2> /dev/null | sed 1d | cut -b3- | fzf -m | while read item; do
- printf '%q ' "$item"
- done
- echo
-}
-
-if [[ $- =~ i ]]; then
-
-if [ -n "$TMUX_PANE" -a ${FZF_TMUX:-1} -ne 0 -a ${LINES:-40} -gt 15 ]; then
- fzf-file-widget() {
- local height
- height=${FZF_TMUX_HEIGHT:-40%}
- if [[ $height =~ %$ ]]; then
- height="-p ${height%\%}"
- else
- height="-l $height"
- fi
- tmux split-window $height "cd $(printf %q "$PWD");zsh -c 'tmux send-keys -t $TMUX_PANE \"\$(__fsel)\"'"
- }
-else
- fzf-file-widget() {
- LBUFFER="${LBUFFER}$(__fsel)"
- zle redisplay
- }
-fi
-zle -N fzf-file-widget
-bindkey '^T' fzf-file-widget
-
-# ALT-C - cd into the selected directory
-fzf-cd-widget() {
- cd "${$(command find -L . -xdev \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
- -o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m):-.}"
- zle reset-prompt
-}
-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
- if selected=$(fc -l 1 | fzf -x +s --tac +m -n2..,.. --toggle-sort=ctrl-r -q "$LBUFFER"); then
- num=$(echo "$selected" | head -1 | awk '{print $1}' | sed 's/[^0-9]//g')
- LBUFFER=!$num
- zle expand-history
- fi
- zle redisplay
-}
-zle -N fzf-history-widget
-bindkey '^R' fzf-history-widget
-
-# ALT-I - Paste the selected entry from locate output into the command line
-fzf-locate-widget() {
- local selected
- if selected=$(locate / | fzf -q "$LBUFFER"); then
- LBUFFER=$selected
- fi
- zle redisplay
-}
-zle -N fzf-locate-widget
-bindkey '\ei' fzf-locate-widget
-
-fi