zsh-workers
 help / color / mirror / code / Atom feed
From: Borzenkov Andrey <Andrey.Borzenkov@siemens.com>
To: "'Oliver Kiddle'" <okiddle@yahoo.co.uk>, zsh-workers@sunsite.dk
Subject: RE: Passsing descriptions down in completion functions
Date: Fri, 10 Jan 2003 11:10:44 +0300	[thread overview]
Message-ID: <6134254DE87BD411908B00A0C99B044F03A0B5D5@MOWD019A> (raw)
In-Reply-To: <503.1042132191@finches.logica.co.uk>


> On 9 Jan, you wrote:
> >
> > Well, I started to look into these functions and immediately hit some
> > problems:
> >
> > AIX/Type/_object_classes:
> >
> > _wanted objectclasses expl 'object class' \
> >    _files -W ${ODMDIR:-/etc/objrepos} -g '^*.vc'
> >
> > Here is just no place where I could stuff the magic "-". Granted, this
> one
> > does not pass arguments it receives but in general I do not see why it
> > should not do it.
> 
> I think you can put the "-" on the end of the line like this:
>   _wanted ... \
>      _files -W ${ODMDIR:-/etc/objrepos} -g '^*.vc' "$@" -
> 

But you cannot know in advance how _arbitrary_ completion function would
react to stray "-"

> > Base/Utility/_sub_commands
> >
> > if [[ CURRENT -eq 2 ]]; then
> >   _wanted commands expl command compadd "$@"
> > else
> >   _message 'no more arguments'
> > fi
> >
> > almost the same problem. In this case arguments contain both description
> and
> > matches so I have no way to stuff "-" in between.
> 
> That's a slightly unusual case because any matches passed to
> _sub_commands could be thought of as not being arguments to compadd to
> be passed on in the traditional sense. It is probably best handled by
> passing a "-" in the calling function.
> 

Snowball effect :(

> I agree that this isn't particularly ideal though. I remember Sven
> saying something about rethinking the way compadd options are passed
> but I was mostly thinking in terms of suffixes and not descriptions.
> It'd be wise to think in terms of all the compadd options and how they
> are passed around in coming up with a good solution.
> 

Yep. I was thinking mostly not about special way to pass arguments (unless
absolutely needed) but rather about documented discipline. Approximately

- every completion function (i.e. function that generates matches, directly
or indirectly) must accept all compadd options, must not change their
semantic and must pass them down to any other function it calls (except as
noted below). It limits options, available for private use, but in general I
hope usage of special options should not be widespread. Or we can reserve a
special option for quoting, like gcc does it

_foo ...-normal compadd options... -X -my-option -X my-option-argument
...-normal compadd options...

(-X is taken, I know). This is relatively easy to do assuming all functions
are using zparseopts

- low level completion utilities _never_ modify passed options, it is simply
not their business.

> A variant of your _all_labels suggestion is perhaps not a bad idea. I'd
> want to be able to override any passed descriptions in some cases.
>

then do it in completion function that actually needs it (I presume it is
actually a minority). Replace passed arguments with your own. This needs
some utility, we just need to think about the best way to do it. Probably as
an option to zparseopts or something like

zmergeopts [options] current new

where options would be "override", "preserve" and probably more.

This allows such functions as _wanted (or _all_labels) to extract options
from passed command and possibly merge them with generated description if
needed. Extracting options may need some extra utility as well.

Any comments?

-andrey


  reply	other threads:[~2003-01-10  8:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-09 16:26 Borzenkov Andrey
2003-01-09 17:09 ` Oliver Kiddle
2003-01-10  8:10   ` Borzenkov Andrey [this message]
2003-01-14 15:43     ` Oliver Kiddle
  -- strict thread matches above, loose matches on Subject: below --
2003-01-09 13:17 Borzenkov Andrey
     [not found] ` <32149.1042120127@finches.logica.co.uk>
2003-01-09 14:04   ` Oliver Kiddle
2003-01-09 15:09   ` Borzenkov Andrey
2003-01-09 16:11     ` Oliver Kiddle

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=6134254DE87BD411908B00A0C99B044F03A0B5D5@MOWD019A \
    --to=andrey.borzenkov@siemens.com \
    --cc=okiddle@yahoo.co.uk \
    --cc=zsh-workers@sunsite.dk \
    /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).