From 53d5d9d1624d23175eca4c1e1bd93bbbb7b41b0c Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Sat, 24 Jan 2015 18:07:24 +0100 Subject: [PATCH] Improve `find` command for cd widgets: exclude proc/dev etc When using the widget in "/", it would descend into 'dev/'. Using '*' for the starting path would do so also with the new '-fstype' excludes. `cut -b3-` and `sed 1d` have been added to massage the different format of the list. This also uses `-L` with all calls to find, especially for the file finders. Ref: https://github.com/junegunn/fzf/pull/122 --- install | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/install b/install index b0ec19b..07cb0ab 100755 --- a/install +++ b/install @@ -202,10 +202,10 @@ EOF # Key bindings # ------------ __fsel() { - command find * -path '*/\.*' -prune \ + 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 | fzf -m | while read item; do + -o -type l -print 2> /dev/null | sed 1d | cut -b3- | fzf -m | while read item; do printf '%q ' "$item" done echo @@ -226,7 +226,8 @@ __fsel_tmux() { __fcd() { local dir - dir=$(command find -L ${1:-*} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf +m) && printf 'cd %q' "$dir" + dir=$(command find -L ${1:-.} \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \ + -o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m) && printf 'cd %q' "$dir" } __use_tmux=0 @@ -274,17 +275,16 @@ unset __use_tmux fi EOFZF - else + else # zsh cat >> $src << "EOFZF" # Key bindings # ------------ # CTRL-T - Paste the selected file path(s) into the command line __fsel() { - set -o nonomatch - command find * -path '*/\.*' -prune \ + 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 | fzf -m | while read item; do + -o -type l -print 2> /dev/null | sed 1d | cut -b3- | fzf -m | while read item; do printf '%q ' "$item" done echo @@ -314,8 +314,8 @@ bindkey '^T' fzf-file-widget # ALT-C - cd into the selected directory fzf-cd-widget() { - cd "${$(set -o nonomatch; command find -L * -path '*/\.*' -prune \ - -o -type d -print 2> /dev/null | fzf):-.}" + cd "${$(command find -L . \( -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 @@ -369,14 +369,15 @@ function fzf_key_bindings end function __fzf_list - command find * -path '*/\.*' -prune \ + 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 + -o -type l -print 2> /dev/null | sed 1d | cut -b3- end function __fzf_list_dir - command find -L * -path '*/\.*' -prune -o -type d -print 2> /dev/null + command find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) \ + -prune -o -type d -print 2> /dev/null | sed 1d | cut -b3- end function __fzf_escape