diff options
author | Ville Skyttä <ville.skytta@iki.fi> | 2011-10-12 23:01:10 +0300 |
---|---|---|
committer | Ville Skyttä <ville.skytta@iki.fi> | 2011-10-12 23:01:10 +0300 |
commit | 156656c16d4302d059221a06eb7c1bd460e41fe9 (patch) | |
tree | 87b9edeaab27b4d7a5ae70644a5b7803c3cc7c25 /completions/find | |
parent | d3d6476f6c24cebb89e4712477e568dd5f5fbca8 (diff) | |
download | bash-completion-156656c16d4302d059221a06eb7c1bd460e41fe9.tar.gz |
Split/rename many completions into per-command files.
Diffstat (limited to 'completions/find')
-rw-r--r-- | completions/find | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/completions/find b/completions/find new file mode 100644 index 00000000..1d3a2822 --- /dev/null +++ b/completions/find @@ -0,0 +1,122 @@ +# bash completion for GNU find. 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 + + case $prev in + -maxdepth|-mindepth) + COMPREPLY=( $( compgen -W '{0..9}' -- "$cur" ) ) + return 0 + ;; + -newer|-anewer|-cnewer|-fls|-fprint|-fprint0|-fprintf|-name|-iname|\ + -lname|-ilname|-wholename|-iwholename|-samefile) + _filedir + return 0 + ;; + -fstype) + _fstypes + [[ $OSTYPE == *bsd* ]] && \ + COMPREPLY+=( $( compgen -W 'local rdonly' -- "$cur" ) ) + return 0 + ;; + -gid) + _gids + return 0 + ;; + -group) + COMPREPLY=( $( compgen -g -- "$cur" 2>/dev/null) ) + return 0 + ;; + -xtype|-type) + COMPREPLY=( $( compgen -W 'b c d p f l s' -- "$cur" ) ) + return 0 + ;; + -uid) + _uids + return 0 + ;; + -user) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + -exec|-execdir|-ok|-okdir) + words=(words[0] "$cur") + cword=1 + _command + return 0 + ;; + -[acm]min|-[acm]time|-iname|-lname|-wholename|-iwholename|-lwholename|\ + -ilwholename|-inum|-path|-ipath|-regex|-iregex|-links|-perm|-size|\ + -used|-printf|-context) + # do nothing, just wait for a parameter to be given + return 0 + ;; + -regextype) + COMPREPLY=( $( compgen -W 'emacs posix-awk posix-basic \ + posix-egrep posix-extended' -- "$cur" ) ) + return 0 + ;; + esac + + _expand || return 0 + + 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 0 + 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[@]} -ne 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 && ${onlyonce[$i]} ]] || continue + for j in ${!COMPREPLY[@]}; do + [[ ${COMPREPLY[j]} == $i ]] && unset COMPREPLY[j] + done + done + fi + + _filedir + + return 0 +} && +complete -F _find find + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh |