zsh-users
 help / color / mirror / code / Atom feed
From: Mikael Magnusson <mikachu@gmail.com>
To: martin@mvath.de
Cc: Zsh Users <zsh-users@zsh.org>
Subject: Re: How to disable certain completion tags?
Date: Thu, 16 Feb 2017 15:26:21 +0100	[thread overview]
Message-ID: <CAHYJk3QTXgr4Z85z4gdX+Ez32NtrNg3zj04P8W3qC_Y8yC+4zg@mail.gmail.com> (raw)
In-Reply-To: <slrnoaauqi.5s3.martin@lounge.imp.fu-berlin.de>

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


  reply	other threads:[~2017-02-16 17:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-16 10:13 Martin Vaeth
2017-02-16 14:26 ` Mikael Magnusson [this message]
2017-02-16 21:54   ` Martin Vaeth
2017-02-16 23:28     ` Oliver Kiddle
2017-02-17 10:08       ` Martin Vaeth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAHYJk3QTXgr4Z85z4gdX+Ez32NtrNg3zj04P8W3qC_Y8yC+4zg@mail.gmail.com \
    --to=mikachu@gmail.com \
    --cc=martin@mvath.de \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).