# bash completion for ant and phing -*- shell-script -*- proc _ant { local cur prev words cword _init_completion || return match $prev { with -h|-help|--h|--help|-projecthelp|-p|-version|-diagnostics return 0 with -buildfile|-file|-f _filedir 'xml' return 0 with -logfile|-l _filedir return 0 with -propertyfile _filedir properties return 0 with -nice setglobal COMPREPLY = ''( $( compgen -W '{1..10}' -- "$cur" ) ) return 0 with -lib _filedir -d return 0 with -logger|-listener|-inputhandler|-main|-find|-s return 0 } if [[ $cur == -D* ]] { return 0 } elif [[ "$cur" == -* ]] { setglobal COMPREPLY = ''( $( compgen -W '$( _parse_help "$1" -h )' -- "$cur" ) ) } else { # available targets completion # find which buildfile to use local buildfile=build.xml i for (( i=1; i < cword; i++ )); do if [[ "${words[i]}" == -@(?(build)file|f) ]]; then buildfile=${words[i+1]} break fi done if [[ $i -eq $cword ]] { for i in [$ANT_ARGS] { if [[ $prev == -@(?(build)file|f) ]] { setglobal buildfile = $i break } setglobal prev = $i } } [[ ! -f $buildfile ]] && return 0 # parse buildfile for targets local line targets while read -rd '>' line { [[ $line =~ \ \<(targe|extension-poin)t[[:space:]].*name=[\"\']([^\"\']+) ]] \ && setglobal targets = "" $(BASH_REMATCH[2])"" } < $buildfile setglobal COMPREPLY = ''( $( compgen -W '$targets' -- "$cur" ) ) } } && complete -F _ant ant phing type complete-ant-cmd.pl &>/dev/null && \ complete -C complete-ant-cmd.pl -F _ant ant || : # ex: ts=4 sw=4 et filetype=sh