Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [SUBMIT] _ant completion function
- X-seq: zsh-users 5269
- From: Felix Rosencrantz <f_rosencrantz@xxxxxxxxx>
- To: Oliver Kiddle <okiddle@xxxxxxxxxxx>, Bill Burton <billb@xxxxxxxxxxxx>
- Subject: Re: [SUBMIT] _ant completion function
- Date: Mon, 19 Aug 2002 17:52:48 -0700 (PDT)
- Cc: Zsh users <zsh-users@xxxxxxxxxx>
- In-reply-to: <E17gnoZ-0004m9-00@xxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
--- Oliver Kiddle <okiddle@xxxxxxxxxxx> wrote:
> On 16 Aug, Bill Burton wrote:
>
> > Here's my version of an _ant function for Ant completion support in
> > versions 1.3 to 1.5.
>
> Great, thanks. As I suggested in the previous mail, I've gone through
> this and merged it with the _ant I posted last week. The _arguments
> sections were almost the same and I've used the call-command style to
> select between your ant -projecthelp parsing and my sed solution.
>
> > zsh I'd appreciate it. There's also a minor cosmetic issue in that the
> > default target is printed with a leading space. The problem is I couldn't
> > figure out how to do a substitution while condtitionally removing a
> > trailing space. Using ? or * didn't work for me to make a space optional.
>
> Just using ${default_target# } does the job. The other cosmetic issue
> was that targets without a description were added with an empty
> description instead of with no description. I've attempted to fix this,
> hopefully without breaking the rest of it. How do you specify target
> descriptions in a build.xml file?
>
> > Suggested improvements
> > * A number of the options support completing on a classname. However,
> > this doesn't work unless the class file is in a package under the current
> > directory. It would be desirable to complete on any class in the
> > classpath. Since Ant's classpath isn't exposed, the best guess would be
> > to use a classpath of $ANT_HOME/lib/*.jar.
>
> On the 4.1 branch, there is a _java_class function which is meant to do
> this but I can't entirely make sense of what it is doing and how to get
> it to use $ANT_HOME/lib/*.jar as you suggest. It ought to use
> _multi_parts too.
>
> Certainly, this can still be improved. For zsh 4.0, the _java_class
> stuff will need the be replaced with the state from Bill's function, the
> -e option passed to _message needs to go and the $ANT_ARGS stuff needs
> to go. So don't expect this to work properly on 4.0.
>
> Oliver
>
> Index: _ant
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_ant,v
> retrieving revision 1.1
> diff -u -r1.1 _ant
> --- _ant 9 Aug 2002 15:28:24 -0000 1.1
> +++ _ant 19 Aug 2002 14:44:00 -0000
> @@ -1,8 +1,9 @@
> #compdef ant -value-,ANT_ARGS,-default-
>
> typeset -A opt_args
> -local state line curcontext="$curcontext"
> +local buildfile tmp state line curcontext="$curcontext"
> local target='*:target:->target'
> +#local CLASSPATH="$ANT_HOME/lib/*.jar"
>
> if [[ $service = *ANT_ARGS* ]]; then
> compset -q
> @@ -22,17 +23,73 @@
> '-emacs[produce logging information without adornments]' \
> '(-l -logfile)'{-l,-logfile}'[use specified file for
> log]:logfile:_files' \
> '-logger[the class which is to perform
> logging]:classname:_java_class' \
> - '-listener[add an instance of class as a project
> listener]:classname:_java_class' \
> - '(-f -file -buildfile)'{-f,-file,-buildfile}'[use specified build
> file]:build file:_files' \
> - '*-D[specify property with value to use]:property' \
> + '*-listener[add an instance of class as a project
> listener]:classname:_java_class' \
> + '(-f -file -buildfile -find)'{-f,-file,-buildfile}'[use specified
> build file]:build file:_files' \
> + '*-D[specify property with value to use]:property:->property' \
> '-propertyfile[load properties from specfied file]:property
> file:_files' \
> '-inputhandler[specify class which will handle input
> requests]:class:_java_class' \
> - '-find[search for buildfile]:file:_files' \
> + '(-f -file -buildfile)-find[search for build file towards the root of
> filesystem]:build file:(build.xml)' \
> $target && return
>
> -if [[ -n $state ]]; then
> - targets=( $(sed -n 's/ *<target name="\([^"]*\)".*/\1/p' < build.xml)
> )
> - # ant can be used to get a list of targets for us like this but it is
> slow
> - # targets=( ${${(M)${(f)"$(_call_program targets $words[1]
> -projecthelp)"}:# *}# } )
> - _wanted targets expl target compadd -a targets
> -fi
> +case $state in
> + property)
> + if compset -P '*='; then
> + _default
> + else
> + _message -e properties 'property name'
> + fi
> + ;;
> + target)
> + if zstyle -t ":completion:${curcontext}:targets" call-command; then
> + # Run ant -projecthelp also passing any of -find, -buildfile or
> -f options.
> + # Parse output into an array of the format "target:description".
> + # For the array to be set with correct argument boundaries, the
> entire
> + # set statement needs to be eval'd. On Cygwin, need to kill \r's
> output
> + # from Java or parsing will fail.
> + eval set -A tmp "${$(_call_program targets "$words[1]" $buildxml
> -projecthelp |
> + while read target desc
> + do
> + # This loop reads ant -projecthelp output from versions 1.3
> to 1.5
> + ln="${target}${desc:+:$desc}"
> + [[ $target = "" ]] && continue # skip blank lines
> + case $ln in
> + (Buildfile:*)
> + buildfile=$desc
> + ;;
> + (Default:target:*)
> + # with version 1.5, target is on the same line
> + default_target="${${desc/target:/}# }"
> + # versions 1.3 and 1.4 with default target on a
> separate line
> + if [[ -z $default_target ]]; then
> + read junk
> + read default_target junk
> + fi
> + # Output target again indicating its the default one.
> + print -n "'${default_target}:(Default target) ' "
> + ;;
> +
> (Searching:*|Main:targets:|Subtargets:|BUILD:SUCCESSFUL|Total:time:
> + *)
> + ;;
> + (*)
> + # Return target and description
> + print -n "'$ln' "
> + ;;
> + esac
> + done
> + )//$'\015'}"
> + _describe 'target' tmp
> + else
> + if [[ -n $opt_args[-find] ]]; then
> + buildfile=( (../)#${opt_args[-find]:-build.xml}(N[-1]) )
> + else
> + buildfile=${(v)opt_args[(I)(-f|-file|-buildfile)]:-build.xml}
> + fi
> + if [[ -f $buildfile ]]; then
> + targets=( $(sed -n 's/ *<target name="\([^"]*\)".*/\1/p' <
> $buildfile) )
> + _wanted targets expl target compadd -a targets
> + else
> + _message -e targets target
> + fi
> + fi
> + ;;
> +esac
>
> This e-mail and any attachment is for authorised use by the intended
> recipient(s) only. It may contain proprietary material, confidential
> information and/or be subject to legal privilege. It should not be copied,
> disclosed to, retained or used by, any other party. If you are not an
> intended recipient then please promptly delete this e-mail and any attachment
> and all copies and inform the sender. Thank you.
__________________________________________________
Do You Yahoo!?
HotJobs - Search Thousands of New Jobs
http://www.hotjobs.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author