From 898500ffbbe9e8e89a86570d74049f7394851728 Mon Sep 17 00:00:00 2001 From: James Patrick Date: Wed, 20 Nov 2019 16:15:11 -0500 Subject: [PATCH] Reworked fzf dependency. I've reorganized some of the fzf dependency some. There are large number of resources I need from the fzf repo that I have been omitting because zplug does no work well with a repo that both has both bins and plugins. Instead I've been manually managing the fzf.zsh files and the fzf-tmux then using the binary from fzf-bin. This nominally worked for zsh it wasnone functioning for other things that used fzf as a dependency. Additionally this broke the rule of don't write what you don't have to mantra of this project. --- zsh/modules/{fzf => bin}/fzf-tmux | 0 zsh/modules/fzf/README.md | 1 - zsh/modules/fzf/completion.zsh | 197 ------------------------------ zsh/modules/fzf/fzf.zsh | 11 -- zsh/modules/fzf/key-bindings.zsh | 88 ------------- zsh/zplug | 16 ++- 6 files changed, 7 insertions(+), 306 deletions(-) rename zsh/modules/{fzf => bin}/fzf-tmux (100%) delete mode 100644 zsh/modules/fzf/README.md delete mode 100644 zsh/modules/fzf/completion.zsh delete mode 100644 zsh/modules/fzf/fzf.zsh delete mode 100644 zsh/modules/fzf/key-bindings.zsh diff --git a/zsh/modules/fzf/fzf-tmux b/zsh/modules/bin/fzf-tmux similarity index 100% rename from zsh/modules/fzf/fzf-tmux rename to zsh/modules/bin/fzf-tmux diff --git a/zsh/modules/fzf/README.md b/zsh/modules/fzf/README.md deleted file mode 100644 index 2120318..0000000 --- a/zsh/modules/fzf/README.md +++ /dev/null @@ -1 +0,0 @@ -These are generally included with the fzf install. Since I'm using the `fzf-bin` plug these files are not included. These were copied off my Mac (zu). diff --git a/zsh/modules/fzf/completion.zsh b/zsh/modules/fzf/completion.zsh deleted file mode 100644 index 4df21b3..0000000 --- a/zsh/modules/fzf/completion.zsh +++ /dev/null @@ -1,197 +0,0 @@ -# ____ ____ -# / __/___ / __/ -# / /_/_ / / /_ -# / __/ / /_/ __/ -# /_/ /___/_/-completion.zsh -# -# - $FZF_TMUX (default: 0) -# - $FZF_TMUX_HEIGHT (default: '40%') -# - $FZF_COMPLETION_TRIGGER (default: '**') -# - $FZF_COMPLETION_OPTS (default: empty) - -# To use custom commands instead of find, override _fzf_compgen_{path,dir} -if ! declare -f _fzf_compgen_path > /dev/null; then - _fzf_compgen_path() { - echo "$1" - command find -L "$1" \ - -name .git -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ - -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' - } -fi - -if ! declare -f _fzf_compgen_dir > /dev/null; then - _fzf_compgen_dir() { - command find -L "$1" \ - -name .git -prune -o -name .svn -prune -o -type d \ - -a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' - } -fi - -########################################################### - -__fzfcmd_complete() { - [ -n "$TMUX_PANE" ] && [ "${FZF_TMUX:-0}" != 0 ] && [ ${LINES:-40} -gt 15 ] && - echo "fzf-tmux -d${FZF_TMUX_HEIGHT:-40%}" || echo "fzf" -} - -__fzf_generic_path_completion() { - local base lbuf compgen fzf_opts suffix tail fzf dir leftover matches - base=$1 - lbuf=$2 - compgen=$3 - fzf_opts=$4 - suffix=$5 - tail=$6 - fzf="$(__fzfcmd_complete)" - - setopt localoptions nonomatch - eval "base=$base" - [[ $base = *"/"* ]] && dir="$base" - while [ 1 ]; do - if [[ -z "$dir" || -d ${dir} ]]; then - leftover=${base/#"$dir"} - leftover=${leftover/#\/} - [ -z "$dir" ] && dir='.' - [ "$dir" != "/" ] && dir="${dir/%\//}" - matches=$(eval "$compgen $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS" ${=fzf} ${=fzf_opts} -q "$leftover" | while read item; do - echo -n "${(q)item}$suffix " - done) - matches=${matches% } - if [ -n "$matches" ]; then - LBUFFER="$lbuf$matches$tail" - fi - zle redisplay - typeset -f zle-line-init >/dev/null && zle zle-line-init - break - fi - dir=$(dirname "$dir") - dir=${dir%/}/ - done -} - -_fzf_path_completion() { - __fzf_generic_path_completion "$1" "$2" _fzf_compgen_path \ - "-m" "" " " -} - -_fzf_dir_completion() { - __fzf_generic_path_completion "$1" "$2" _fzf_compgen_dir \ - "" "/" "" -} - -_fzf_feed_fifo() ( - command rm -f "$1" - mkfifo "$1" - cat <&0 > "$1" & -) - -_fzf_complete() { - local fifo fzf_opts lbuf fzf matches post - fifo="${TMPDIR:-/tmp}/fzf-complete-fifo-$$" - fzf_opts=$1 - lbuf=$2 - post="${funcstack[2]}_post" - type $post > /dev/null 2>&1 || post=cat - - fzf="$(__fzfcmd_complete)" - - _fzf_feed_fifo "$fifo" - matches=$(cat "$fifo" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_COMPLETION_OPTS" ${=fzf} ${=fzf_opts} -q "${(Q)prefix}" | $post | tr '\n' ' ') - if [ -n "$matches" ]; then - LBUFFER="$lbuf$matches" - fi - zle redisplay - typeset -f zle-line-init >/dev/null && zle zle-line-init - command rm -f "$fifo" -} - -_fzf_complete_telnet() { - _fzf_complete '+m' "$@" < <( - command grep -v '^\s*\(#\|$\)' /etc/hosts | command grep -Fv '0.0.0.0' | - awk '{if (length($2) > 0) {print $2}}' | sort -u - ) -} - -_fzf_complete_ssh() { - _fzf_complete '+m' "$@" < <( - command cat <(cat ~/.ssh/config /etc/ssh/ssh_config 2> /dev/null | command grep -i '^host ' | command grep -v '[*?]' | awk '{for (i = 2; i <= NF; i++) print $1 " " $i}') \ - <(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts | tr ',' '\n' | tr -d '[' | awk '{ print $1 " " $1 }') \ - <(command grep -v '^\s*\(#\|$\)' /etc/hosts | command grep -Fv '0.0.0.0') | - awk '{if (length($2) > 0) {print $2}}' | sort -u - ) -} - -_fzf_complete_export() { - _fzf_complete '-m' "$@" < <( - declare -xp | sed 's/=.*//' | sed 's/.* //' - ) -} - -_fzf_complete_unset() { - _fzf_complete '-m' "$@" < <( - declare -xp | sed 's/=.*//' | sed 's/.* //' - ) -} - -_fzf_complete_unalias() { - _fzf_complete '+m' "$@" < <( - alias | sed 's/=.*//' - ) -} - -fzf-completion() { - local tokens cmd prefix trigger tail fzf matches lbuf d_cmds - setopt localoptions noshwordsplit noksh_arrays noposixbuiltins - - # http://zsh.sourceforge.net/FAQ/zshfaq03.html - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags - tokens=(${(z)LBUFFER}) - if [ ${#tokens} -lt 1 ]; then - zle ${fzf_default_completion:-expand-or-complete} - return - fi - - cmd=${tokens[1]} - - # Explicitly allow for empty trigger. - trigger=${FZF_COMPLETION_TRIGGER-'**'} - [ -z "$trigger" -a ${LBUFFER[-1]} = ' ' ] && tokens+=("") - - tail=${LBUFFER:$(( ${#LBUFFER} - ${#trigger} ))} - # Kill completion (do not require trigger sequence) - if [ $cmd = kill -a ${LBUFFER[-1]} = ' ' ]; then - fzf="$(__fzfcmd_complete)" - matches=$(command ps -ef | sed 1d | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-50%} --min-height 15 --reverse $FZF_DEFAULT_OPTS --preview 'echo {}' --preview-window down:3:wrap $FZF_COMPLETION_OPTS" ${=fzf} -m | awk '{print $2}' | tr '\n' ' ') - if [ -n "$matches" ]; then - LBUFFER="$LBUFFER$matches" - fi - zle redisplay - typeset -f zle-line-init >/dev/null && zle zle-line-init - # Trigger sequence given - elif [ ${#tokens} -gt 1 -a "$tail" = "$trigger" ]; then - d_cmds=(${=FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}) - - [ -z "$trigger" ] && prefix=${tokens[-1]} || prefix=${tokens[-1]:0:-${#trigger}} - [ -z "${tokens[-1]}" ] && lbuf=$LBUFFER || lbuf=${LBUFFER:0:-${#tokens[-1]}} - - if eval "type _fzf_complete_${cmd} > /dev/null"; then - eval "prefix=\"$prefix\" _fzf_complete_${cmd} \"$lbuf\"" - elif [ ${d_cmds[(i)$cmd]} -le ${#d_cmds} ]; then - _fzf_dir_completion "$prefix" "$lbuf" - else - _fzf_path_completion "$prefix" "$lbuf" - fi - # Fall back to default completion - else - zle ${fzf_default_completion:-expand-or-complete} - fi -} - -[ -z "$fzf_default_completion" ] && { - binding=$(bindkey '^I') - [[ $binding =~ 'undefined-key' ]] || fzf_default_completion=$binding[(s: :w)2] - unset binding -} - -zle -N fzf-completion -bindkey '^I' fzf-completion diff --git a/zsh/modules/fzf/fzf.zsh b/zsh/modules/fzf/fzf.zsh deleted file mode 100644 index bcb693d..0000000 --- a/zsh/modules/fzf/fzf.zsh +++ /dev/null @@ -1,11 +0,0 @@ -# Setup fzf -# --------- -THIS_DIR="${${funcsourcetrace[1]%/*}%?}" - -# Auto-completion -# --------------- -[[ $- == *i* ]] && source "${THIS_DIR}/completion.zsh" 2> /dev/null - -# Key bindings -# ------------ -source "${THIS_DIR}/key-bindings.zsh" diff --git a/zsh/modules/fzf/key-bindings.zsh b/zsh/modules/fzf/key-bindings.zsh deleted file mode 100644 index c25368c..0000000 --- a/zsh/modules/fzf/key-bindings.zsh +++ /dev/null @@ -1,88 +0,0 @@ -# Key bindings -# ------------ -if [[ $- == *i* ]]; then - -# 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 2> /dev/null - eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read item; do - echo -n "${(q)item} " - done - local ret=$? - echo - return $ret -} - -__fzf_use_tmux__() { - [ -n "$TMUX_PANE" ] && [ "${FZF_TMUX:-0}" != 0 ] && [ ${LINES:-40} -gt 15 ] -} - -__fzfcmd() { - __fzf_use_tmux__ && - echo "fzf-tmux -d${FZF_TMUX_HEIGHT:-40%}" || echo "fzf" -} - -fzf-file-widget() { - LBUFFER="${LBUFFER}$(__fsel)" - local ret=$? - zle redisplay - typeset -f zle-line-init >/dev/null && zle zle-line-init - return $ret -} -zle -N fzf-file-widget -bindkey '^T' fzf-file-widget - -# Ensure precmds are run after cd -fzf-redraw-prompt() { - local precmd - for precmd in $precmd_functions; do - $precmd - done - zle reset-prompt -} -zle -N fzf-redraw-prompt - -# 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 2> /dev/null - local dir="$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) +m)" - if [[ -z "$dir" ]]; then - zle redisplay - return 0 - fi - cd "$dir" - local ret=$? - zle fzf-redraw-prompt - typeset -f zle-line-init >/dev/null && zle zle-line-init - 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 2> /dev/null - selected=( $(fc -rl 1 | - FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) - local ret=$? - if [ -n "$selected" ]; then - num=$selected[1] - if [ -n "$num" ]; then - zle vi-fetch-history -n $num - fi - fi - zle redisplay - typeset -f zle-line-init >/dev/null && zle zle-line-init - return $ret -} -zle -N fzf-history-widget -bindkey '^R' fzf-history-widget - -fi diff --git a/zsh/zplug b/zsh/zplug index 1d443dc..16eb68a 100644 --- a/zsh/zplug +++ b/zsh/zplug @@ -20,6 +20,10 @@ zplug "zsh-users/zsh-autosuggestions", \ as:plugin, \ defer:2 +zplug "junegunn/fzf", \ + use:"shell/*.zsh", \ + defer:2 + zplug "junegunn/fzf-bin", \ from:gh-r, \ as:command, \ @@ -29,15 +33,9 @@ zplug "zdharma/zsh-diff-so-fancy", \ as:command, \ use:"bin/{git-dsf,diff-so-fancy}" -zplug "${ZDIR}/modules/fzf/", \ - from:local, \ - use:"fzf.zsh", \ - as:plugin - -zplug "${ZDIR}/modules/fzf/", \ - from:local, \ - use:"fzf-tmux", \ - as:command +zplug "${ZDIR}/modules/bin/", \ + as:command, \ + use:"*" zplug "${ZDIR}/modules/history/", \ from:local, \