Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: _files vs _path_files discussion (old thread)
- X-seq: zsh-workers 10095
 
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
 
- To: Adam Spiers <adam@xxxxxxxxxx>, zsh-workers@xxxxxxxxxxxxxx
 
- Subject: Re: _files vs _path_files discussion (old thread)
 
- Date: Sun, 12 Mar 2000 19:43:32 +0000
 
- In-reply-to: <20000312130233.A4744@xxxxxxxxxxxxxxxxxxxxxxx>
 
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
 
- References: <20000311222225.A27795@xxxxxxxxxxxxxxxxxxxxxxx> 	<1000312001854.ZM26814@xxxxxxxxxxxxxxxxxxxxxxx> 	<20000312005127.A28688@xxxxxxxxxxxxxxxxxxxxxxx> 	<1000312062134.ZM27047@xxxxxxxxxxxxxxxxxxxxxxx> 	<1000312063459.ZM27076@xxxxxxxxxxxxxxxxxxxxxxx> 	<199909170728.JAA01949@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> 	<20000312130233.A4744@xxxxxxxxxxxxxxxxxxxxxxx>
 
On Mar 12,  1:02pm, Adam Spiers wrote:
} Subject: Re: _files vs _path_files discussion (old thread)
}
}    # Include non-hidden directories in globbed file completions
}    compstyle '::complete:*' \
}      tag-order 'globbed-files directories' all-files 
}    compstyle '::complete:*:*:directories' file-patterns '*~.*(-/)'
} 
} It's almost perfect ...
Have you tried that with, say, `ls' ?  I'll bet it ends up completing
_only_ directories, because there's no -g option passed to _files for
`ls' like there is for `tar'.
If you have global directories file-patterns you're going to need them
for globbed-files, too ... which then messes up things like `tar' that
pass patterns with -g.  The globbed-files style replaces the -g option
of _files.
} The only problem left is in the handling of
} hidden directories; ideally, I would want hidden directories only to
} appear when the leading `.' is specified manually
Hrm, the behavior you want is the behavior I get (for tar), by using:
zstyle ':completion::complete:tar::directories' file-patterns '*(-/)'
Do you have the GLOB_DOTS option set, by chance?
}    zstyle ':completion::complete:*:*:directories' \
}      file-patterns '*(-/)'
}    zstyle ':completion::complete:*:*:unhidden-directories' \
}      file-patterns '*~.*(-/)'
}    zstyle ':completion::complete:*' tag-order \
}      'globbed-files unhidden-directories' \
}      'globbed-files directories' \
}      all-files
} 
} except that that doesn't work, presumably because you can't just dream
} up new tags like that
You can dream up new tags, but they'll only be used by functions that
know about them -- so you'd have to e.g. modify _files as well.
} and maybe you can't even mention tags twice in tag-order.
It doesn't make sense to mention tags twice in tag-order, because (in
your example) 'globbed-files directories' will only be used when there
are no completions for 'globbed-files unhidden-directories', which 
can't happen if there are any completions for globbed-files alone.
Effectively, what you want is to subdivide the 'directories' tag and
have it treated like it has it's own internal tag-order.  There isn't
any way I can think of to express that at the moment.
One possibility would be to make file-patterns itself into a hierarchy;
that is
zstyle :completion::complete:tar::directories \
	file-patterns '*(-/)' '.*(-/)'
would mean to use '.*(-/)' only if '*(-/)' returned nothing.  The current
meaning of the above is also expressible by
zstyle :completion::complete:tar::directories \
        file-patterns '*(-/) .*(-/)'
(that is, file-patterns is presently a string, not an array) so we would
not be losing any functionality.
Then all we need is a magic token in file-patterns to mean "use anything
passed to _files with the -g option here" and global file-patterns would
become really useful.
-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author