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

Re: dot file completion



Tanaka Akira wrote:

> Z(2):akr@is27e1u11% Src/zsh -f
> is27e1u11% bindkey -e; autoload -U compinit; compinit -D; compdef _tst tst
> is27e1u11% mkdir z
> is27e1u11% touch z/.abc
> is27e1u11% _tst () { _files -g .abc }
> is27e1u11% tst z/.<TAB>
> ./      ..abc   .abc  
> 
> `..abc' shouldn't be completed.
> 
> And `./' too?

Mostly a problem with getting the patterns -- there was a empty string 
in the $pats array. And then we shouldn't prepend a dot to patterns
already starting with one.

Note: with Tanaka's example doing `tst ./.<TAB>' when there is no file 
`.abc' in the current directory will complete to `./.abc' nonetheless. 
In some cases this may be interesting to have, but I guess in most
cases not, right? If anyone now answers `yes', I'll change it...

Bye
 Sven

diff -ru ../z.old/Completion/Core/_path_files Completion/Core/_path_files
--- ../z.old/Completion/Core/_path_files	Fri Mar 24 12:23:16 2000
+++ Completion/Core/_path_files	Fri Mar 24 12:36:57 2000
@@ -30,6 +30,7 @@
 else
   pats=( "${(@)=${(@M)tmp1:#-g*}#-g}" )
 fi
+pats=( "${(@)pats:# #}" )
 
 if (( $#prepaths )); then
   tmp1="${prepaths[2]}"
@@ -269,7 +270,7 @@
       fi
     else
       if [[ ! -o globdots && "$PREFIX" = .* ]]; then
-        tmp1=( ${^tmp1}${skipped}${^~pats} ${^tmp1}${skipped}.${^~pats} )
+        tmp1=( ${^tmp1}${skipped}${^~pats} ${^tmp1}${skipped}.${^~pats:#.*} )
       else
         tmp1=( ${^tmp1}${skipped}${^~pats} )
       fi

--
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



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