Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: compsys issues
- X-seq: zsh-users 8133
- From: Oliver Kiddle <okiddle@xxxxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxxxxx>
- Subject: Re: compsys issues
- Date: Wed, 27 Oct 2004 16:08:26 +0200
- In-reply-to: <20041027132610.GA9928@DervishD>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <20041027132610.GA9928@DervishD>
DervishD wrote:
> # expand-or-complete is currently bound to <TAB>
> zle -C expand-or-complete expand-or-complete _completer
>
> function _completer () {
>
> compstate[insert]=${compstate[insert]//tab /}
>
> compadd -f - $PREFIX*(/)
I realise that it is there to get any preceding directory portion but
you're overriding the internal matching by starting the pattern match
with $PREFIX. I'd use something like ${(M)PREFIX##*/} instead.
> Let's say I pick 'Projects' and hit tab again. Now I'm presented
> with this:
>
> $ cd Projects/<TAB>
>
> Projects/mta/ Projects/zsh-things/ Projects/more/
>
> But what I want is to be presented with:
>
> $ cd Projects/<TAB>
>
> mta/ zsh-things/ more/
For that, you need to use compset -P '*/' to move the initial directory
portions to $IPREFIX so they are not part of matching.
> I've tried tweaking IPREFIX and PREFIX (with and without the help
> from compset), I've tried generating the list of matches before
You need to tweak the compadd command too. After compset, any initial
directory portion will be in $IPREFIX instead of $PREFIX. That will
include a trailing slash so you can do $IPREFIX*(/) to get the files.
That will now try to add stuff like `Projects/more' as a match when
`Projects/' is in IPREFIX. You don't want to include the stuff in
$IPREFIX in the possible matches so you can use the :t modifier to get
just the filenames as matches: $IPREFIX*(/:t)
Next, you need to use compadd's -W option so that the -f option can find
the right directory. Try something like the following to begin with:
compadd -W $PWD/$IPREFIX -f - $IPREFIX*(/:t)
That won't work with paths starting with variable expansions or
non-relative directories. You'll need more logic to work out the
argument to -W. Using $~IPREFIX will help resolve any expansions on the
command line.
Hope that helps
Oliver
Messages sorted by:
Reverse Date,
Date,
Thread,
Author