first commit
This commit is contained in:
commit
0610f4aeab
130 changed files with 9897 additions and 0 deletions
58
fn/-z4h-find
Normal file
58
fn/-z4h-find
Normal file
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
local dot_glob=$1
|
||||
local only_dirs=$2
|
||||
local dirs=("${@:3}")
|
||||
|
||||
(( $#dirs )) || return 0
|
||||
|
||||
local -a bin
|
||||
local -a flags
|
||||
() {
|
||||
emulate -L zsh
|
||||
# Set dot_glob in case the value of find-flags depends on it (via `zstyle -e`).
|
||||
# Ideally we should run this with user options.
|
||||
(( dot_glob )) && setopt dot_glob
|
||||
local widget=${WIDGET#z4h-}
|
||||
zstyle -a :z4h:$widget find-command bin
|
||||
if (( ! $#bin )); then
|
||||
if (( $+commands[bfs] )); then
|
||||
bin=(command bfs)
|
||||
else
|
||||
bin=(command find)
|
||||
fi
|
||||
fi
|
||||
zstyle -a :z4h:$widget find-flags flags
|
||||
if (( ! $#flags )); then
|
||||
flags=(-name '.*' -prune -print -o -print)
|
||||
fi
|
||||
}
|
||||
|
||||
local -a cmd
|
||||
local -aU fss
|
||||
fss=(${(f)"$("${bin[@]}" / . -maxdepth 0 -printf '%F\n' 2>/dev/null)"}) || fss=()
|
||||
if (( $#fss )) && [[ -z ${(M)fss:#unknown} ]]; then
|
||||
cmd+=("${bin[@]}" -L ./$^dirs)
|
||||
(( only_dirs )) && cmd+=('!' -type d -prune -o)
|
||||
cmd+=('!' '(')
|
||||
local fs
|
||||
for fs in $fss; do
|
||||
cmd+=(-fstype $fs -o)
|
||||
done
|
||||
cmd[-1]=(')' -prune '(' "${flags[@]}" ')')
|
||||
(( dot_glob )) || cmd+=(-o -name '.*' -prune)
|
||||
cmd+=(-o "${flags[@]}")
|
||||
else
|
||||
cmd+=("${bin[@]}" -L . -xdev -mindepth 1)
|
||||
(( only_dirs )) && cmd+=('!' -type d -prune -o)
|
||||
cmd+=('!' -path './*/*' '!' '(')
|
||||
local dir
|
||||
for dir in $dirs; do
|
||||
cmd+=(-name ${(b)dir} -o)
|
||||
done
|
||||
cmd[-1]=(')' -prune)
|
||||
(( dot_glob )) || cmd+=(-o -name '.*' -prune)
|
||||
cmd+=(-o "${flags[@]}")
|
||||
fi
|
||||
|
||||
"${cmd[@]}"
|
Loading…
Add table
Add a link
Reference in a new issue