Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Putting options after tasks
- X-seq: zsh-users 16882
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Jesper Nygårds <jesper.nygards@xxxxxxxxx>
- Subject: Re: Putting options after tasks
- Date: Wed, 14 Mar 2012 19:30:16 +0100
- Cc: zsh-users@xxxxxxx
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=2w99opR5oYXHQZWUDmccYEaKZzHA4JwIl06RgxKrecE=; b=oDS8DthA8ukijMzeeLqiQYb8BeXGjBw/F6aWP3Mg6Obitdo61Kp/ad3j3RjZQdbeCa JfL9v/ORgrAuHH9AS/uiKGmxd2MLAScJ0ydtnGPBgPNXKqARP/rPRkQsX8t7tRxk8+PO tBLbE581MjbCJ+a35jXlqpfqqM+SQ4cTdYDlXTJjvcq8TZJH7RbEZEpQ8FFztPXzUQDz iiAaOnC6yawPMEjJkxSh/U+3RhXfZZMV8Vh/PKbXC1JRIldy9QcBIIG+WnhJoTrYkDoo G88l/vAsJbOsxSjScbvFlyIH3T1p1c6cSehBTbB6GQaE62JW6b+pzrMn/JyCz+Pf73gX 2hDQ==
- In-reply-to: <CABZhJg9sya0JmRYG+2OYw6nb=eX_ZBj37fFXn_Jit1fTK8zrDw@mail.gmail.com>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CABZhJg9sya0JmRYG+2OYw6nb=eX_ZBj37fFXn_Jit1fTK8zrDw@mail.gmail.com>
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
fi
return ret
--
Mikael Magnusson
Messages sorted by:
Reverse Date,
Date,
Thread,
Author