Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Problem with fake-files style and cd

On Feb 14,  8:41pm, Mikael Magnusson wrote:
} 2009/2/14 Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>:
} > I'm not sure I'm following the last part of that, but what you need to
} > look at is the documentation for the tag-order zstyle.
} Even if I had accidentally read that whole section, it would not have
} occurred to me it could be used here.

Next you need to read chapters 10 and 15 of "From Bash to Z Shell". :-)

(Hey, Peter and Oliver ... any updated revision of the book planned?)

} It is a tiny bit confusing why the name of the "directories" tag is
} changed to local-directories only when $cdpath is set, is it for any
} other reason than to break all your styles when you set/unset cdpath?

It's been like that for years ... in fact originally it appears that
the local-directories style was *always* used, even if cdpath was not
set, so someone (Sven?) probably decided that it didn't make sense to
differentiate "local" if there was no possibility of "non-local".  The
ChangeLog from that time gives no hints.

I'm also sure the expectation was that cdpath is not something that
changes state frequently; it's value might change but not whether it
*has* a value.

} > I use this:
} >
} >    zstyle :completion::complete:cd:: tag-order \
} >        local-directories path-directories

This can easily be modified to deal with a flip-flop of cdpath:

    zstyle :completion::complete:cd:: tag-order \
    	'directories local-directories' path-directories

The local-directories style doc ought to mention this, I guess.

} Thanks, with my hack to _cd removed, I think this does more or less
} exactly what I want. I wouldn't mind if it was on a per-completion
} entry, ie it would be nice if I got this:
} % mkdir -p local/code/foo
} % mkdir -p path/code/bar
} % cdpath=$PWD/path
} % cd local
} % cd code<tab>
} ---- local directory
} foo/
} ---- directory in cdpath
} bar/
} which is what I get without the above style set. However,
} % mkdir arg
} % cd <tab>
} ---- local directory
} arg/   code/
} ---- directory in cdpath
} code/
} I don't want the cdpath to appear in this case, only once I'm actually
} completing at a place where they differ.

I'm not entirely sure, but I think what you're asking for is to have
duplicate completions removed from the listing even when the duplicates
are in different tag groups.  Suppose we add

% mkdir -p path/other/thing

to the above.  Is what you'd like to see:

% cd <tab>
---- local directory
arg/   code/
---- directory in cdpath

??  That isn't something that's supported in the internals, but for a
specific case like this we can the the same effect like so:

zstyle -e :completion::complete:cd::path-directories ignored-patterns \
    	'reply=( *(/) )'

This says that when completing in the cdpath, ignore any name that matches
the name of a directory in the current directory.

In fact I like that so much I might even replace my tag-order with it.

Messages sorted by: Reverse Date, Date, Thread, Author