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

Re: Reinsertion of file prefix for accepted completion?

On Jan 3, 12:33pm, James Devenish wrote:
} Is there some way (that isn't too outrageous, but perhaps involves the
} calling of a 'fixup' function) to reinsert a compadd -W file prefix when
} the completion is accepted?

Not really, no.

It's a completion system, not an abbreviation system.  The focus is on
producing on the command line an argument in the form that is expected
by the command.  If the command expects a full path, then the completer
should insert the full path.

In other words, instead of

    _path_files -W "( . /not/current/directory )" -g '*(.)'

you should be using something like

    _alternative \
	"local-files:: _path_files -g '*(.)'" \
	"other-files:: _path_files -g '/not/current/directory/*(.)'"

If you have a particular command for which you'd like to be able to use
abbreviated file names as arguments, then write a wrapper function for
that command; e.g. (crudely, for a command named "foo"):

    foo () {
	setopt localoptions noksharrays noshwordsplit
	integer i=$ARGC
	while ((--i))
	    if [[ -f ./$argv[i] ]]; then
	    elif [[ -f /not/current/directory/$argv[i] ]]; then
	command foo $*

However, you don't both get to use the abbreviations *and* see the full
paths in the command history.

If you *really* wanted to work for it, you could write a new ZLE widget
to replace accept-line, which would walk through the command buffer
every time you press enter to do this same sort of rewriting before
finally calling `zle .accept-line'.  I'm not going to attempt to show
an example of that, because it's fraught with potential problems, but
it could be done.

Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   

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