Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Three questions about a completer
- X-seq: zsh-users 21881
- From: Oliver Kiddle <okiddle@xxxxxxxxxxx>
- To: Jesper Nygårds <jesper.nygards@xxxxxxxxx>
- Subject: Re: Three questions about a completer
- Date: Mon, 12 Sep 2016 22:53:03 +0200
- Cc: Zsh Users <zsh-users@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1473713584; bh=FvR8QRXcA0sNSVrrdZz12Emsq+t6oFHWriyjSD+TYwA=; h=cc:In-reply-to:From:References:To:Subject:Date:From:Subject; b=HaUqzHTgbPDg9YG/nUCGkWuGEo8kOLMwb1H4d/fmKIX8oSBvPV5hoqRyCfFzofqExoI7fO9my2dqv4kLFl3jzeXGVnOJUzhz1d84Ywf5AKnG5BmBoyGnRY5JILRTRnd0ChAt6QnUpLpgv2AYwAVS7CmGx43qkUv7wYt2bs6EmqQPEnhqdUFQDAhfvMu2Z4vB04gytacz4wYrRL2PkaMHSd/4v2RBysJNsim2+IHsrEutMwehTh0t3MOHghzEkda+2jFCr44JfoYoUHo3eFIEAotasy1MwVlRpTXjOB2IYl5u30C72fTjG/TDDiD0E0Ic0cDnPp4Q40iAiA4aiTis7g==
- In-reply-to: <CABZhJg-VR4ss0KpxLvUnrUS7JnTVGGdSWePH7NzCzQvdimMubg@mail.gmail.com>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CABZhJg-VR4ss0KpxLvUnrUS7JnTVGGdSWePH7NzCzQvdimMubg@mail.gmail.com>
Jesper Nygårds wrote:
> I have a completer function that I have bound with menu-complete to alt-e
> 1) I want to have the alternatives offered by consecutive presses of alt-e,
> and I don't want the alternatives to be listed below the command line. To
The hidden style should suppress listing the matches:
zstyle ':completion:*list-comp:*' hidden all
But hidden is looked up from _description which you don't call.
You could add _wanted around the compadd but all the hidden style
actually does is cause the -n option to be passed to compadd which you
could do directly.
> 2) The line starting with "[[ -n $words[CURRENT] ]] ..." is meant to make
> sure that only files that match whats given on the command line (case
> insensitively and anywhere within the file name) is offered as
I would try using the completion matching control:
compadd -n -p /etc/ -M 'l:|=* m:{[:lower:]}={[:upper:]}' /etc/*(:t)
> alternatives. I does work, but it also means that reversing the order -
> either by starting with alt-e and then hitting alt-E, or the opposite -
> does not work. I assume that when I reverse the order, the widget is called
> again, and since there is already a file on the command line (from pressing
> alt-e once), there is only one file matching. Is there a better way to get
> this behaviour? Again, I want to put a string on the command line, hit
> alt-e, and only those files having a part matching what i wrote should be
> offered. If I then reverse the order, I want the same list, i.e. those
> files matching what I originally wrote.
Using _menu generally does what I think you're describing. To use that,
you may want to use _generic instead of _list-result directly. I'd
recommend using _generic regardless of whether you want _menu, actually.
Other completers such as _match could also be useful.
zle -C list-comp menu-complete _generic
zstyle ':completion:*list-comp::::' completer _menu _list-result
The same thing can probably be done directly: _menu is not long but I
wonder whether it is right with the reverse widget.
> 3) I like the idea of using $NUMERIC to trigger alternative behaviour, in
> this example getting the file names from another directory. That means I
The menu completion widgets interpret the numeric argument. You can
always use a wrapper zle widget:
zle-list-comp() {
local dir
(( NUMERIC == 1 )) && dir=/etc || dir=~
zle list-comp -n 1
}
zle -N zle-list-comp
The -n 1 there passes 1 as the numeric argument on to list-comp. Needing
two widgets is a big ugly but I don't know of any alternative.
Oliver
Messages sorted by:
Reverse Date,
Date,
Thread,
Author