mirror of
https://github.com/Gator96100/ProxSpace.git
synced 2025-01-09 20:33:34 -08:00
114 lines
3.8 KiB
Bash
114 lines
3.8 KiB
Bash
# bash completion for GNU find -*- shell-script -*-
|
|
# This makes heavy use of ksh style extended globs and contains Linux specific
|
|
# code for completing the parameter to the -fstype option.
|
|
|
|
_find()
|
|
{
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local i
|
|
for i in ${!words[*]}; do
|
|
if [[ ${words[i]} == -@(exec|ok)?(dir) ]]; then
|
|
_command_offset $((i + 1))
|
|
return
|
|
fi
|
|
done
|
|
|
|
case $prev in
|
|
-maxdepth | -mindepth)
|
|
COMPREPLY=($(compgen -W '{0..9}' -- "$cur"))
|
|
return
|
|
;;
|
|
-newer | -anewer | -cnewer | -fls | -fprint | -fprint0 | -fprintf | -name | -[il]name | \
|
|
-ilname | -wholename | -[il]wholename | -samefile)
|
|
_filedir
|
|
return
|
|
;;
|
|
-fstype)
|
|
_fstypes
|
|
[[ $OSTYPE == *bsd* ]] &&
|
|
COMPREPLY+=($(compgen -W 'local rdonly' -- "$cur"))
|
|
return
|
|
;;
|
|
-gid)
|
|
_gids
|
|
return
|
|
;;
|
|
-group)
|
|
COMPREPLY=($(compgen -g -- "$cur" 2>/dev/null))
|
|
return
|
|
;;
|
|
-xtype | -type)
|
|
COMPREPLY=($(compgen -W 'b c d p f l s' -- "$cur"))
|
|
return
|
|
;;
|
|
-uid)
|
|
_uids
|
|
return
|
|
;;
|
|
-user)
|
|
COMPREPLY=($(compgen -u -- "$cur"))
|
|
return
|
|
;;
|
|
-[acm]min | -[acm]time | -inum | -path | -ipath | -regex | -iregex | -links | -perm | \
|
|
-size | -used | -printf | -context)
|
|
# do nothing, just wait for a parameter to be given
|
|
return
|
|
;;
|
|
-regextype)
|
|
COMPREPLY=($(compgen -W 'emacs posix-awk posix-basic posix-egrep
|
|
posix-extended' -- "$cur"))
|
|
return
|
|
;;
|
|
esac
|
|
|
|
local i exprfound=false
|
|
# set exprfound to true if there is already an expression present
|
|
for i in "${words[@]}"; do
|
|
[[ $i == [-\(\),\!]* ]] && exprfound=true && break
|
|
done
|
|
|
|
# handle case where first parameter is not a dash option
|
|
if ! $exprfound && [[ $cur != [-\(\),\!]* ]]; then
|
|
_filedir -d
|
|
return
|
|
fi
|
|
|
|
# complete using basic options
|
|
COMPREPLY=($(compgen -W '-daystart -depth -follow -help
|
|
-ignore_readdir_race -maxdepth -mindepth -mindepth -mount
|
|
-noignore_readdir_race -noleaf -regextype -version -warn -nowarn -xdev
|
|
-amin -anewer -atime -cmin -cnewer -ctime -empty -executable -false
|
|
-fstype -gid -group -ilname -iname -inum -ipath -iregex -iwholename
|
|
-links -lname -mmin -mtime -name -newer -nogroup -nouser -path -perm
|
|
-readable -regex -samefile -size -true -type -uid -used -user
|
|
-wholename -writable -xtype -context -delete -exec -execdir -fls
|
|
-fprint -fprint0 -fprintf -ls -ok -okdir -print -print0 -printf -prune
|
|
-quit' -- "$cur"))
|
|
|
|
if ((${#COMPREPLY[@]} != 0)); then
|
|
# this removes any options from the list of completions that have
|
|
# already been specified somewhere on the command line, as long as
|
|
# these options can only be used once (in a word, "options", in
|
|
# opposition to "tests" and "actions", as in the find(1) manpage).
|
|
local -A onlyonce=([-daystart]=1 [-depth]=1 [-follow]=1 [-help]=1
|
|
[-ignore_readdir_race]=1 [-maxdepth]=1 [-mindepth]=1 [-mount]=1
|
|
[-noignore_readdir_race]=1 [-noleaf]=1 [-nowarn]=1 [-regextype]=1
|
|
[-version]=1 [-warn]=1 [-xdev]=1)
|
|
local j
|
|
for i in "${words[@]}"; do
|
|
[[ $i && -v onlyonce["$i"] ]] || continue
|
|
for j in "${!COMPREPLY[@]}"; do
|
|
[[ ${COMPREPLY[j]} == "$i" ]] && unset 'COMPREPLY[j]'
|
|
done
|
|
done
|
|
fi
|
|
|
|
_filedir
|
|
|
|
} &&
|
|
complete -F _find find
|
|
|
|
# ex: filetype=sh
|