From: Oliver Kiddle <opk@zsh.org>
To: Zsh workers <zsh-workers@zsh.org>
Subject: Re: [PATCH 1/2] __arguments: New completion function for _arguments.
Date: Sat, 03 Apr 2021 01:58:21 +0200 [thread overview]
Message-ID: <15909-1617407901.853986@YG9A.ovow.2A9B> (raw)
In-Reply-To: <20210401173305.GB11180@tarpaulin.shahaf.local2>
Daniel Shahaf wrote:
> > _compadd could define a pattern to complete compadd options for
> > all commands named _*.
I've attached a patch to do this.
It is a post pattern and I don't have any real commands named with an
initial _ on my system. Perhaps it should also call _default for
non-option arguments?
It also checks $service and handles a few functions specially. I
couldn't be bothered to make this more extensive because, well, it is
all a bit meta and of questionable value. And, no I don't think these
need separating into __ functions.
> > > + _arguments -A '-*' : \
> Hmm. How about «-A '-*|:|(!|)\(*'»?
I'd have expected it to be the same as the pattern used at the top of
_arguments - '-([AMO]*|[0CRSWnsw])' but that doesn't seem to work. I
wonder if some bug means it only works with -*
> > > + "-C[modify \$curcontext for \`->action' (requires \`local curcontext')]" \
> >
> > This is instead of the $context array.
> > Should only be used where multiple valid states is not a possibility.
>
> There isn't room to say all this inside the brackets.
>
> > I fear that the note in parentheses implies just `local curcontext' and
> > not local curcontext="$curcontext" is needed.
>
> Good point. How about deleting the parenthetical? Or replacing it by
> "(see manual)"?
I'd remove it. There's room in the square brackets for one of the
points. - "instead of $context". Descriptions are truncated if needed so
less important information coming at the end doesn't do much harm.
>
> > > + "-R[when \`->action' matches, return 300]" \
> >
> > I don't think that really gets used much [[ -n $state ]] is more
> > readable.
>
> How does this affect the patch? Are you suggesting to hide (with «!»)
> this too?
Not really, it was just an aside.
Oliver
diff --git a/Completion/Zsh/Command/_compadd b/Completion/Zsh/Command/_compadd
index 781fa2af8..9c92cda76 100644
--- a/Completion/Zsh/Command/_compadd
+++ b/Completion/Zsh/Command/_compadd
@@ -1,47 +1,94 @@
-#compdef compadd
+#compdef compadd -P _*
-local curcontext="$curcontext" state line ret=1
+local curcontext="$curcontext" ret=1
+local -a state line args
typeset -A opt_args
-_arguments -C -s -S -A "-*" \
- '-P+[specify prefix]:prefix' \
- '-S+[specify suffix]:suffix' \
- '-p+[specify hidden prefix]:hidden prefix' \
- '-s+[specify hidden suffix]:hidden suffix' \
- '-i+[specify ignored prefix]:ignored prefix' \
- '-I+[specify ignored suffix]:ignored suffix' \
- '(-k)-a[matches are elements of specified arrays]' \
- '(-a)-k[matches are keys of specified associative arrays]' \
- '-d+[specify display strings]:array:_parameters -g "*array*"' \
- '-l[list display strings one per line, not in columns]' \
+args=(
+ '-P+[specify prefix]:prefix'
+ '-S+[specify suffix]:suffix'
+ '-p+[specify hidden prefix]:hidden prefix'
+ '-s+[specify hidden suffix]:hidden suffix'
+ '-i+[specify ignored prefix]:ignored prefix'
+ '-I+[specify ignored suffix]:ignored suffix'
'-o[specify order for matches by match string not by display string]:: : _values -s , order
"match[order by match not by display string]"
"nosort[matches are pre-ordered]"
"numeric[order numerically]"
- "reverse[order backwards]"' \
- '(-1 -E)-J+[specify match group]:group' \
- '!-V+:group' \
- '(-J -E)-1[remove only consecutive duplicates from group]' \
- '-2[preserve all duplicates]' \
- '(-x)-X[specify explanation]:explanation' \
- '(-X)-x[specify unconditional explanation]:explanation' \
- '-q[make suffix autoremovable]' \
- '-r+[specify character class for suffix autoremoval]:character class' \
- '-R+[specify function for suffix autoremoval]:function:_functions' \
- '-f[mark matches as being files]' \
- '-e[mark matches as being parameters]' \
- '-W[specify location for matches marked as files]' \
- '-F+[specify array of ignore patterns]:array:_parameters -g "*array*"' \
- '-Q[disable quoting of possible completions]' \
- '*-M[specify matching specifications]' \
- '-n[hide matches in completion listing]' \
- '-U[disable internal matching of completion candidates]' \
- '-O+[populate array with matches instead of adding them]:array:_parameters -g "*array*"' \
- '-A+[populate array with expanded matches instead of adding them]:array:_parameters -g "*array*"' \
- '-D+[delete elements from array corresponding to non-matching candidates]:array:_parameters -g "*array*"' \
- '-C[add special match that expands to all other matches]' \
- '(-1 -J)-E+[add specified number of display only matches]:number' \
- '*:candidate:->candidates' && ret=0
+ "reverse[order backwards]"'
+ '(-1 -E)-J+[specify match group]:group'
+ '!-V+:group'
+ '(-J -E)-1[remove only consecutive duplicates from group]'
+ '-2[preserve all duplicates]'
+ '(-x)-X[specify explanation]:explanation'
+ '(-X)-x[specify unconditional explanation]:explanation'
+ '-q[make suffix autoremovable]'
+ '-r+[specify character class for suffix autoremoval]:character class'
+ '-R+[specify function for suffix autoremoval]:function:_functions'
+ '-F+[specify array of ignore patterns]:array:_parameters -g "*array*"'
+ '-Q[disable quoting of possible completions]'
+ '*-M[specify matching specifications]'
+ '-n[hide matches in completion listing]'
+ '-O+[populate array with matches instead of adding them]:array:_parameters -g "*array*"'
+ '-A+[populate array with expanded matches instead of adding them]:array:_parameters -g "*array*"'
+ '-D+[delete elements from array corresponding to non-matching candidates]:array:_parameters -g "*array*"'
+)
+
+case $service in
+ compadd|_(path_|)files)
+ args+=(
+ '-W[specify location for matches marked as files]'
+ )
+ ;|
+ compadd)
+ args+=(
+ '(-k)-a[matches are elements of specified arrays]'
+ '(-a)-k[matches are keys of specified associative arrays]'
+ '-d+[specify display strings]:array:_parameters -g "*array*"'
+ '-l[list display strings one per line, not in columns]'
+ '-f[mark matches as being files]'
+ '-e[mark matches as being parameters]'
+ '-C[add special match that expands to all other matches]'
+ '(-1 -J)-E+[add specified number of display only matches]:number'
+ '-U[disable internal matching of completion candidates]'
+ '*:candidate:->candidates'
+ )
+ ;;
+ _dates)
+ args=( ${args:#([(][^)]##\)|)-[12noOAD]*}
+ '-f[specify format for matches]:format:_date_formats'
+ '-F[select a future rather than past date]'
+ )
+ ;;
+ _(path_|)files)
+ args=( ${args:#([(][^)]##\)|)-[OAD]*}
+ '-g+[specify file glob pattern]:glob pattern'
+ '-/[complete only directories]'
+ )
+ ;;
+ _parameters)
+ args+=(
+ '-g+[specify pattern to filter parameter type by]:pattern'
+ )
+ ;;
+ _pids)
+ args+=( '-m+[pattern to filter process command line by]:pattern' )
+ ;;
+ _process_names)
+ args+=(
+ '-a[include all processes]'
+ '-t[use truncated process names]'
+ )
+ ;;
+ _sys_calls)
+ args+=(
+ '-a[add "all" as an additional match]'
+ '-n[add "none" as an additional match]'
+ )
+ ;;
+esac
+
+_arguments -C -s -S -A "-*" $args && ret=0
if [[ -n $state ]]; then
if (( $+opt_args[-a] )); then
next prev parent reply other threads:[~2021-04-02 23:58 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-01 0:00 Daniel Shahaf
2021-04-01 0:00 ` [PATCH 2/2] ___arguments: New completion function for __arguments Daniel Shahaf
2021-04-01 12:53 ` [PATCH 1/2] __arguments: New completion function for _arguments Oliver Kiddle
2021-04-01 17:33 ` Daniel Shahaf
2021-04-01 22:34 ` _arguments -n / $NORMARG (was: Re: [PATCH 1/2] __arguments: New completion function for _arguments.) Daniel Shahaf
2021-04-09 19:24 ` Oliver Kiddle
2021-04-09 22:52 ` Daniel Shahaf
2021-04-02 23:58 ` Oliver Kiddle [this message]
2021-04-10 20:41 ` [PATCH 1/2] __arguments: New completion function for _arguments Lawrence Velázquez
2021-04-13 11:28 ` Daniel Shahaf
2021-04-17 12:25 ` Daniel Shahaf
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=15909-1617407901.853986@YG9A.ovow.2A9B \
--to=opk@zsh.org \
--cc=zsh-workers@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).