# bash completion for ant and phing -*- shell-script -*- proc _ant { var 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 var 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) ]] { set buildfile = $i break } set prev = $i } } [[ ! -f $buildfile ]] && return 0 # parse buildfile for targets var line = '', targets = '' while read -rd '>' line { [[ $line =~ \ \<(targe|extension-poin)t[[:space:]].*name=[\"\']([^\"\']+) ]] \ && set 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