zsh-users
 help / color / mirror / code / Atom feed
From: Yuri D'Elia <wavexx@thregr.org>
To: zsh-users@zsh.org
Subject: Re: rsync --progress stops completion
Date: Sun, 21 Sep 2014 18:43:08 +0200	[thread overview]
Message-ID: <lvmv6s$o5c$1@ger.gmane.org> (raw)
In-Reply-To: <140920112024.ZM29459@torch.brasslantern.com>

On 09/20/2014 08:20 PM, Bart Schaefer wrote:
> } will stop the completion entirely. Surely, with _files you can go on,
> } but I would like /--?.*/ to be simply treated as an unknown argument, so
> } that a further flag would properly complete as expected as if --unknown
> } was never there in the first place.
> 
> OK. so you'd like that.  That doesn't mean everyone would like that, so
> you still haven't answered the question "how would you like to tell the
> completion system about it, if not in the completer zstyle?"

I mean, I don't particularly "like" that, it's obvious that I would love
the completion to be accurate (I guess I can't just be lazy about broken
completers.. right?).

I'm just sure that I don't like to have to force file completion "at
times", but I honestly don't have a better alternative. I was just
suggesting a possibility. I agree about all the counter points about
this approach as well.

And yes, a zstyle would definitely be the way I would tell the completer
about the preference.

> However, perhaps the following is close enough to what you want?  This
> is similar to doing "compset -n $CURRENT" except that it retains the
> first word (presumably the command name).
> 
> 
> _try_again() {
>   [[ $compstate[context] = command && CURRENT -gt 2 ]] || return 1
>   words=("$words[1]" "${(@)words[CURRENT,-1]}")
>   CURRENT=2
>   _compskip=default
>   _normal -s
> }
> zstyle ':completion:*' completer _oldlist _expand _complete _try_again
> 
> 
> Obviously this defeats any attempt at making option suggestions mutually
> exclusive, and might (depending again upon the implementation of the
> completion function) end up suggesting options where only a non-option
> argument is valid.

Good points about suggesting invalid alternatives, but very interesting
nonetheless:

_complete_failed()
{
  if [[ $LASTWIDGET = *complete* && -z $_complete_failed_active ]]
  then
    local _complete_failed_active=1
    [[ $compstate[context] = command && CURRENT -gt 2 ]] || return 1
    words=("$words[1]" "${(@)words[CURRENT,-1]}")
    CURRENT=2
    _compskip=default
    _normal -s
  fi
}

Now, this only offers the fallback if we attempt completion *twice*, so
it's somewhat in the middle.

At first, trying it randomly, looks like a good compromise to me.

rsync --bullshit doesn't offer me any flat at first, but completes
sensibly at the second attempt. This means mutually exclusive options
will also correctly be offered.



  reply	other threads:[~2014-09-21 16:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-16 15:00 Yuri D'Elia
2014-09-16 15:09 ` Vadim A. Misbakh-Soloviov
2014-09-16 17:50   ` Yuri D'Elia
2014-09-17  0:51     ` Bart Schaefer
2014-09-17  8:08       ` Yuri D'Elia
2014-09-17 15:51         ` Bart Schaefer
2014-09-18  9:42           ` Yuri D'Elia
2014-09-18 16:36             ` Bart Schaefer
2014-09-19  2:01               ` Bart Schaefer
2014-09-19  3:22                 ` Mikael Magnusson
2014-09-19 11:40                 ` Oliver Kiddle
2014-09-21  0:48                   ` Bart Schaefer
2014-09-20 13:25                 ` Yuri D'Elia
2014-09-20 18:20                   ` Bart Schaefer
2014-09-21 16:43                     ` Yuri D'Elia [this message]
2014-09-21 17:20                       ` Bart Schaefer
2014-09-21 17:33                         ` Yuri D'Elia
2014-09-21 19:38                           ` Bart Schaefer
2014-09-21 20:27                             ` Yuri D'Elia
2014-09-21 20:37                               ` Yuri D'Elia
2014-09-21 22:07                                 ` Bart Schaefer
2014-09-21 22:29                                   ` Yuri D'Elia
2014-09-22  6:58                                     ` Bart Schaefer
2014-09-21 21:08                               ` Bart Schaefer
2014-09-21 21:35                                 ` Yuri D'Elia
2014-09-21 21:54                                   ` typeset -g (was Re: rsync --progress stops completion) Bart Schaefer
2014-09-21 18:52                         ` rsync --progress stops completion Yuri D'Elia
2014-09-21 18:59                         ` Yuri D'Elia
2014-09-20 13:20               ` Yuri D'Elia
2014-09-23 14:23                 ` Oliver Kiddle
2014-09-23 14:43                   ` Peter Stephenson
2014-09-16 15:25 ` Vadim A. Misbakh-Soloviov
2014-09-16 16:28 ` Bart Schaefer

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='lvmv6s$o5c$1@ger.gmane.org' \
    --to=wavexx@thregr.org \
    --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).