Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Putting options after tasks

2012/3/14 Jesper Nygårds <jesper.nygards@xxxxxxxxx>:
> I am trying to write a completion function for gradle, and face some
> problems regarding the order of options and tasks.
> Below I have simplified my approach as much as possible, in order to
> explain my problem clearly. The basis for this is originally the
> gradle completion from oh-my-zsh.
> gradle can take any number of options (long options starting with
> "--") and tasks (with no prefix). In my example below, I have boiled
> this down to two options ("--info" and "--stacktrace"), and two tasks
> ("build" and "clean").
> These options and tasks can come in any order, so the following
> command lines would all be valid:
> gradle clean build
> gradle --info clean build --stacktrace
> gradle --stacktrace --info clean build
> etc
> My problem is this: the completion below works fine and completes both
> options and tasks, but once I have at least one task on the command
> line, it no longer completes for options. So, for example, if I have
> "gradle build --i" and press <tab>, I get no suggestions, whereas
> "gradle bu<tab>" gives "gradle build", and "gradle --i<tab>" gives
> "gradle --info".
> What do I have to do to make it possible to complete options after tasks?

Replace :: with : and it will "work", however there are some other
problems with the code you wrote. You modify the $commands array
without making it local, you also forget to local a few other things.
The following seems to work fine (i also put it in an autoloaded
_gradle file in $fpath):

#compdef gradle

local ret=1 state state_descr line
local curcontext="$curcontext"
local -A opt_args
local -a commands

_arguments -C \
   '--info[Log at the info level]' \
   '--stacktrace[Display stacktrace on error]' \
   '*:command:->command' \
   && ret=0

if [[ $state == command ]]; then
   commands=( "clean:Clean the project" "build:Build the project" )
   _describe -t commands 'gradle commands' commands && ret=0

return ret

Mikael Magnusson

Messages sorted by: Reverse Date, Date, Thread, Author