From: Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
To: zsh-workers@sunsite.dk
Subject: PATCH: Re: Two missing completion functions that bug me
Date: Wed, 4 Apr 2001 13:25:05 +0200 (MET DST) [thread overview]
Message-ID: <200104041125.NAA28595@beta.informatik.hu-berlin.de> (raw)
In-Reply-To: <20010402120413.85593.qmail@web9304.mail.yahoo.com>
Oliver Kiddle wrote:
> > Yes, I was beginning to think the same. Would it be enough to make
> > my
> > other patch optional (i.e. adding a option to _arguments to select
> > either that behaviour or to de-select it)? Which should be the
> > default?
>
> That sounds reasonable. I think the current behaviour (without your
> other patch) should be the default because I think it is more common
> but I'm not particularly bothered.
Just what I thought... I've used `-W', couldn't think of a better character.
Bye
Sven
Index: Completion/Base/Utility/_arguments
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Base/Utility/_arguments,v
retrieving revision 1.1
diff -u -r1.1 _arguments
--- Completion/Base/Utility/_arguments 2001/04/02 11:09:34 1.1
+++ Completion/Base/Utility/_arguments 2001/04/04 11:21:05
@@ -4,7 +4,7 @@
# descriptions given as arguments to this function.
local long cmd="$words[1]" descr mesg subopts opt usecc autod
-local oldcontext="$curcontext" hasopts rawret
+local oldcontext="$curcontext" hasopts rawret optarg singopt
long=$argv[(I)--]
if (( long )); then
@@ -173,18 +173,21 @@
fi
subopts=()
-while [[ "$1" = -(O*|[CR]) ]]; do
+singopt=()
+while [[ "$1" = -(O*|[CRWs]) ]]; do
case "$1" in
-C) usecc=yes; shift ;;
-O) subopts=( "${(@P)2}" ); shift 2 ;;
-O*) subopts=( "${(@P)1[3,-1]}" ); shift ;;
-R) rawret=yes; shift;;
+ -W) optarg=yes; shift;;
+ -s) singopt=(-s); shift;;
esac
done
zstyle -s ":completion:${curcontext}:options" auto-description autod
-if (( $# )) && comparguments -i "$autod" "$@"; then
+if (( $# )) && comparguments -i "$autod" "$singopt[@]" "$@"; then
local action noargs aret expl local tried
local next direct odirect equal single matcher matched ws tmp1 tmp2 tmp3
local opts subc tc prefix suffix descrs actions subcs anum
@@ -335,14 +338,19 @@
if [[ "$single" = direct ]]; then
_all_labels options expl option \
compadd -QS '' - "${PREFIX}${SUFFIX}"
- elif [[ "$single" = next ]]; then
+ elif [[ -z "$optarg" && "$single" = next ]]; then
_all_labels options expl option \
compadd -Q - "${PREFIX}${SUFFIX}"
elif [[ "$single" = equal ]]; then
_all_labels options expl option \
compadd -QqS= - "${PREFIX}${SUFFIX}"
else
+
tmp1=( "$next[@]" "$direct[@]" "$odirect[@]" "$equal[@]" )
+
+ [[ "$single" = next ]] &&
+ tmp1=( "${(@)tmp1:#[-+]${PREFIX[-1]}((#e)|:*)}" )
+
[[ "$PREFIX" != --* ]] && tmp1=( "${(@)tmp1:#--*}" )
tmp3=( "${(M@)tmp1:#[-+]?[^:]*}" )
tmp1=( "${(M@)tmp1:#[-+]?(|:*)}" )
@@ -351,6 +359,11 @@
_describe -o option \
tmp1 tmp2 -Q -S '' -- \
tmp3 -Q
+
+ [[ -n "$optarg" && "$single" = next && nm -eq $compstate[nmatches] ]] &&
+ _all_labels options expl option \
+ compadd -Q - "${PREFIX}${SUFFIX}"
+
fi
single=yes
else
Index: Completion/X/Utility/_x_arguments
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/X/Utility/_x_arguments,v
retrieving revision 1.1
diff -u -r1.1 _x_arguments
--- Completion/X/Utility/_x_arguments 2001/04/02 12:13:15 1.1
+++ Completion/X/Utility/_x_arguments 2001/04/04 11:21:05
@@ -17,7 +17,7 @@
fi
opts=()
-while [[ $1 = -(O*|[CR]) ]]; do
+while [[ $1 = -(O*|[CRWs]) ]]; do
opts=($opts $1)
[[ $1 = -R ]] && rawret=yes
shift
Index: Completion/X/Utility/_xt_arguments
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/X/Utility/_xt_arguments,v
retrieving revision 1.1
diff -u -r1.1 _xt_arguments
--- Completion/X/Utility/_xt_arguments 2001/04/02 12:13:30 1.1
+++ Completion/X/Utility/_xt_arguments 2001/04/04 11:21:05
@@ -53,7 +53,7 @@
fi
opts=()
-while [[ $1 = -(O*|[CR]) ]]; do
+while [[ $1 = -(O*|[CRWs]) ]]; do
opts=($opts $1)
[[ $1 = -R ]] && rawret=yes
shift
Index: Doc/Zsh/compsys.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v
retrieving revision 1.116
diff -u -r1.116 compsys.yo
--- Doc/Zsh/compsys.yo 2001/04/02 13:04:05 1.116
+++ Doc/Zsh/compsys.yo 2001/04/04 11:21:07
@@ -2930,6 +2930,13 @@
one option name. This allows the use of the `tt(-s)' option to describe
single-letter options together with such long option names.
+The tt(-s) option may be combined with the option tt(-W) to say that more
+option characters are to be expected even after an option that takes an
+argument. For example, if a command takes the options `tt(a)' and `tt(b)',
+where `tt(a)' takes an argument in the next word, tt(_arguments) would
+normally not complete the other option directly after `tt(-a)', but it would
+allow that if given the tt(-W) option.
+
The forms of var(optspec) are:
startitem()
@@ -3202,6 +3209,13 @@
- '(uncompress)' \
{-d,--decompress}'[decompress]')
+Note that using multiple sets will be slower than using only one set
+because the completion code has to parse the command line once for
+every set. So more than one set should only be used if the command
+syntax is too complicated. Note also that an option specification with
+rest-arguments (as in `tt(-foo:*:...)') often allows the use of
+multiple sets to be avoided.
+
To simplify the specifications for commands with standard option
parsing, the options tt(-S) and tt(-A) may be given. With tt(-S), no
option will be completed after a `tt(-)tt(-)' on the line and this
@@ -3212,13 +3226,6 @@
completing options after the first normal argument, but ignoring all
strings starting with a hyphen even if they are not described by one
of the var(optspec)s, one would use: `tt(-A "-*")'.
-
-Note that using multiple sets will be slower than using only one set
-because the completion code has to parse the command line once for
-every set. So more than one set should only be used if the command
-syntax is too complicated. Note also that an option specification with
-rest-arguments (as in `tt(-foo:*:...)') often allows the use of
-multiple sets to be avoided.
Another option supported is `tt(-O) var(name)'. The var(name) will be
taken as the name of an array and its elements will be given to
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
prev parent reply other threads:[~2001-04-04 11:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-04-02 9:15 Sven Wischnowsky
2001-04-02 12:04 ` Oliver Kiddle
2001-04-04 11:25 ` Sven Wischnowsky [this message]
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=200104041125.NAA28595@beta.informatik.hu-berlin.de \
--to=wischnow@informatik.hu-berlin.de \
--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).