* How to disable certain completion tags?
@ 2017-02-16 10:13 Martin Vaeth
2017-02-16 14:26 ` Mikael Magnusson
0 siblings, 1 reply; 5+ messages in thread
From: Martin Vaeth @ 2017-02-16 10:13 UTC (permalink / raw)
To: zsh-users
I have written a completion for a complex command; calculating
completions for some options of this command needs a long time
(and produces a huge list).
Some of these options should share a common tag, and I want that the
user has a way to disable the completion of that tag so that the
long time is not required when the user presses tab accidentally
or if he uses something like https://github.com/hchbaw/auto-fu.zsh/
To my knowledge, it should be possible to use the tag mechanism
to achieve this, but it does not seem to work as I had understood it.
Here is a minimal example of a completion file demonstrating how
I attempt to achieve the goal with the tag name "foos" for the
command "dummy"; the "sleep" should indicate where the command
used in my actual code takes a long time.
#compdef dummy
local curcontext="$curcontext" state state_descr line expl
typeset -A opt_args
_arguments -C : '--foo=[desc]:some foo:->foo'
ret=$?
case $state in
(foo)
_tags foos
_tags && {
_description foos expl 'available foo'
compadd "$expl[@]" - $(sleep 5; echo foo1 foo2)
} && ret=0;;
esac
return ret
My understanding is that the second "_tags" should end with nonzero
state if the user has disabled all tags from the list (and the list
should consist only of "foos" due to the first "_tags foos" command).
However, if I (as user) attempt to disable the "foos" tag for the
"dummy" completion with something like
zstyle ':completion:*:*:dummy:*' tag-order ''
it does not show any effect. I think once (some years ago, I was now not
able to reproduce) I had found some zstyle command which disabled the
completion, but nevertheless "dummy foo=<tab>" had taken a long time
to complete (to nothing) with the above code.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to disable certain completion tags?
2017-02-16 10:13 How to disable certain completion tags? Martin Vaeth
@ 2017-02-16 14:26 ` Mikael Magnusson
2017-02-16 21:54 ` Martin Vaeth
0 siblings, 1 reply; 5+ messages in thread
From: Mikael Magnusson @ 2017-02-16 14:26 UTC (permalink / raw)
To: martin; +Cc: Zsh Users
On Thu, Feb 16, 2017 at 11:13 AM, Martin Vaeth <martin@mvath.de> wrote:
> I have written a completion for a complex command; calculating
> completions for some options of this command needs a long time
> (and produces a huge list).
>
> Some of these options should share a common tag, and I want that the
> user has a way to disable the completion of that tag so that the
> long time is not required when the user presses tab accidentally
> or if he uses something like https://github.com/hchbaw/auto-fu.zsh/
>
> To my knowledge, it should be possible to use the tag mechanism
> to achieve this, but it does not seem to work as I had understood it.
>
> Here is a minimal example of a completion file demonstrating how
> I attempt to achieve the goal with the tag name "foos" for the
> command "dummy"; the "sleep" should indicate where the command
> used in my actual code takes a long time.
>
> #compdef dummy
> local curcontext="$curcontext" state state_descr line expl
> typeset -A opt_args
> _arguments -C : '--foo=[desc]:some foo:->foo'
> ret=$?
> case $state in
> (foo)
> _tags foos
> _tags && {
> _description foos expl 'available foo'
> compadd "$expl[@]" - $(sleep 5; echo foo1 foo2)
> } && ret=0;;
> esac
> return ret
>
> My understanding is that the second "_tags" should end with nonzero
> state if the user has disabled all tags from the list (and the list
> should consist only of "foos" due to the first "_tags foos" command).
> However, if I (as user) attempt to disable the "foos" tag for the
> "dummy" completion with something like
>
> zstyle ':completion:*:*:dummy:*' tag-order ''
>
> it does not show any effect. I think once (some years ago, I was now not
> able to reproduce) I had found some zstyle command which disabled the
> completion, but nevertheless "dummy foo=<tab>" had taken a long time
> to complete (to nothing) with the above code.
Does this help?
In addition to tag names, each string in the value may
take one of the
following forms:
- If any value consists of only a hyphen, then
only the tags
specified in the other values are generated.
Normally all tags
not explicitly selected are tried last if the
specified tags
fail to generate any matches. This means that
a single value
consisting only of a single hyphen turns off completion.
--
Mikael Magnusson
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to disable certain completion tags?
2017-02-16 14:26 ` Mikael Magnusson
@ 2017-02-16 21:54 ` Martin Vaeth
2017-02-16 23:28 ` Oliver Kiddle
0 siblings, 1 reply; 5+ messages in thread
From: Martin Vaeth @ 2017-02-16 21:54 UTC (permalink / raw)
To: zsh-users
Mikael Magnusson <mikachu@gmail.com> wrote:
> Martin Vaeth <martin@mvath.de> wrote:
>>
>> zstyle ':completion:*:*:dummy:*' tag-order ''
>>
>> [...] does not show any effect.
>
> Does this help?
>
> - If any value consists of only a hyphen [...]
Thanks for the reply. But this is not exactly what I intended:
zstyle ':completion:*:*:dummy:*' tag-order -
switches off completion completely for "dummy" (in particular, also
"dummy --f<tab>" is not being completed to "dummy --foo="); I only
want to switch off completion for the tag "foo" (in the example after
"dummy --foo=<tab>").
None of my alternative attempts like (actually I had tried many more)
zstyle ':completion:*:*:dummy:*' tag-order '- ! foo'
zstyle ':completion:*:*:dummy:*' tag-order - '!' foo
zstyle ':completion:*:*:dummy:*' tag-order - '!foo'
zstyle ':completion:*:*:dummy:*' tag-order '- !foo'
zstyle ':completion:*:*:dummy:*' tag-order '!foo'
zstyle ':completion:*:*:dummy:*' tag-order '!' foo
seems to have any effect, either.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to disable certain completion tags?
2017-02-16 21:54 ` Martin Vaeth
@ 2017-02-16 23:28 ` Oliver Kiddle
2017-02-17 10:08 ` Martin Vaeth
0 siblings, 1 reply; 5+ messages in thread
From: Oliver Kiddle @ 2017-02-16 23:28 UTC (permalink / raw)
To: martin; +Cc: zsh-users
Martin Vaeth wrote:
> Thanks for the reply. But this is not exactly what I intended:
>
> zstyle ':completion:*:*:dummy:*' tag-order -
>
> switches off completion completely for "dummy" (in particular, also
You either need to narrow down the context:
zstyle ':completion:*:*:dummy:option--foo-1:*' tag-order -
or list the tags you don't want:
zstyle ':completion:*:*:dummy:*' tag-order 'options' -
-or-
zstyle ':completion:*:*:dummy:*' tag-order '!foo' -
Oliver
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to disable certain completion tags?
2017-02-16 23:28 ` Oliver Kiddle
@ 2017-02-17 10:08 ` Martin Vaeth
0 siblings, 0 replies; 5+ messages in thread
From: Martin Vaeth @ 2017-02-17 10:08 UTC (permalink / raw)
To: zsh-users
Oliver Kiddle <okiddle@yahoo.co.uk> wrote:
>
> You either need to narrow down the context:
> zstyle ':completion:*:*:dummy:option--foo-1:*' tag-order -
> or list the tags you don't want:
> zstyle ':completion:*:*:dummy:*' tag-order 'options' -
Thanks a lot! These two do the trick!
> -or-
> zstyle ':completion:*:*:dummy:*' tag-order '!foo' -
This does not, but if a dummy argument is added, the following works:
zstyle ':completion:*:*:dummy:*' tag-order bar - '!foo'
There still seems no possibility to disable two tags without listing
all the rest explicitly, but at least wildcards can be used for that
listing.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-02-17 10:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-16 10:13 How to disable certain completion tags? Martin Vaeth
2017-02-16 14:26 ` Mikael Magnusson
2017-02-16 21:54 ` Martin Vaeth
2017-02-16 23:28 ` Oliver Kiddle
2017-02-17 10:08 ` Martin Vaeth
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).