zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <okiddle@yahoo.co.uk>
To: "Zsh workers" <zsh-workers@zsh.org>
Subject: Re: PATCH: some repeatable options in completions
Date: Sun, 29 Sep 2019 18:00:56 +0200	[thread overview]
Message-ID: <31109-1569772856.311549@seAm.LCSw.e6-i> (raw)
In-Reply-To: <08fda202-ce07-4ec7-907f-2dfae3a38215@www.fastmail.com>

"Daniel Shahaf" wrote:
> Oliver Kiddle wrote on Fri, 27 Sep 2019 09:40 +00:00:
> > ssh, multiple -t options force tty allocation, even if ssh has no local
> > tty. So I'm not sure there's any meaning to specifying it more than
> > twice but _arguments doesn't provide an easy way to indicate that.
> > 
>
> (untested) How about:
>
>          '(-t -tt)-T[disable pseudo-tty allocation]' \
>          '(-T)-t[force pseudo-tty allocation]' \
>          "(-T)-tt[force pseudo-tty allocation even if have no controlling tty]" \

There are some cases where we've used that form. The disadvantage is
that it bloats the option/description listing. The shorter it is, the
more chance you have of finding what you're looking for. And given
that -tt will be rare from the command-line rather than a script, I'm
reluctant to add it here in that form. Note that with that form, -tt
should exclude -t and arguably also -t can exclude -tt.

It is also possible to check whether we already have a -t on the command
line and alter the description accordingly. As in the following patch.
The pattern for this has limitations as a t might appear in an argument
to another option. We don't have opt_args before _arguments has been
called.

I also noticed another case of unmarked repeatable options, this time in
_dsh.

Oliver

diff --git a/Completion/Unix/Command/_ssh b/Completion/Unix/Command/_ssh
index f8f4e0091..df1fe6ca8 100644
--- a/Completion/Unix/Command/_ssh
+++ b/Completion/Unix/Command/_ssh
@@ -4,7 +4,7 @@
 
 _ssh () {
   local curcontext="$curcontext" state line expl suf ret=1
-  local args common common_transfer algopt tmp p1 file cmn cmds sdesc
+  local args common common_transfer algopt tmp p1 file cmn cmds sdesc tdesc
   typeset -A opt_args
 
   common=(
@@ -30,6 +30,7 @@ _ssh () {
 
   case "$service" in
   ssh)
+    (( $+words[(r)-[^-]#t*] )) && tdesc=' even if there is no controlling tty'
     _arguments -C -s \
       '(-a)-A[enable forwarding of the authentication agent connection]' \
       '(-A)-a[disable forwarding of authentication agent connection]' \
@@ -60,7 +61,7 @@ _ssh () {
       '-Q+[query parameters]:query option:((cipher\:"supported symmetric ciphers" cipher-auth\:"supported symmetric ciphers that support authenticated encryption" mac\:"supported message integrity codes" kex\:"key exchange algorithms" key\:"key types" key-cert\:"certificate key types" key-plain\:"non-certificate key types" protocol-version\:"supported SSH protocol versions" sig\:"supported signature algorithms" help\:"show supported queries"))' \
       '-s[invoke subsystem]' \
       '(-t)-T[disable pseudo-tty allocation]' \
-      '(-T)-t[force pseudo-tty allocation]' \
+      "(-T)*-t[force pseudo-tty allocation${tdesc}]" \
       '-V[show version number]' \
       '(-q)*-v[verbose mode (multiple increase verbosity, up to 3)]' \
       '-W+[forward standard input and output to host]:stdinout forward:->hostport' \
diff --git a/Completion/Unix/Command/_dsh b/Completion/Unix/Command/_dsh
index fc7680062..2486b23fd 100644
--- a/Completion/Unix/Command/_dsh
+++ b/Completion/Unix/Command/_dsh
@@ -10,10 +10,10 @@ _arguments -s -C -S \
   '(-M --show-machine-names)'{-M,--show-machine-names}'[prepend the host name on output]' \
   '(-i --duplicate-input)'{-i,--duplicate-input}'[duplicate input given to dsh]' \
   '(-b --bufsize)'{-b,--bufsize}'[change buffer size used in input duplication]:buffer size for -i (bytes)' \
-  '(-m --machine)'{-m,--machine}'[execute on machine]:machine:{_hosts || _user_at_host}' \
+  \*{-m,--machine}'[execute on machine]:machine:{_hosts || _user_at_host}' \
   '(-n --num-topology)'{-n,--num-topology}'[how to divide the machines]:number' \
   '(-a --all)'{-a,--all}'[execute on all machines]' \
-  '(-g --group)'{-g,--group}'[execute on group member]:groupname:->groups' \
+  \*{-g,--group}'[execute on group member]:groupname:->groups' \
   '(-f --file)'{-f,--file}'[use the file as list of machines]:file:_files' \
   '(-r --remoteshell)'{-r,--remoteshell}'[execute using shell]:remote shell:(rsh ssh)' \
   '(-o --remoteshellopt)'{-o,--remoteshellopt}'[option to give to remote shell ]:option' \

      reply	other threads:[~2019-09-29 16:01 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-27  9:40 Oliver Kiddle
2019-09-27 13:49 ` Daniel Shahaf
2019-09-29 16:00   ` Oliver Kiddle [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=31109-1569772856.311549@seAm.LCSw.e6-i \
    --to=okiddle@yahoo.co.uk \
    --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).