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

Re: Something rotten in tar completion

On Dec 2,  5:26pm, Peter Stephenson wrote:
} Turns out it was recursive-files.  I had that set for my "src"
} subdirectory, which was a bit daft since it's got to search through any old
} clutter to find a completion for a bare file name.  Removing that
} removes the wait.
} Would still be nice to be able to kill it...

In the most recent _main_complete, the message on the interrupt should
tell you where it was:

trap 'zle -M "Killed by signal in ${funcstack[1]} after ${SECONDS}s";

Getting that $funcstack name might be helpful.  In the meantime, it does
not seem useful to regenerate the recursive listing for every directory
in the recursive-files style:

diff --git a/Completion/Unix/Type/_files b/Completion/Unix/Type/_files
index 0f6fcd6..049b49c 100644
--- a/Completion/Unix/Type/_files
+++ b/Completion/Unix/Type/_files
@@ -121,9 +121,11 @@ for def in "$pats[@]"; do
           if _path_files -g "$pat" "$opts[@]" "$expl[@]"; then
 	  elif [[ $PREFIX$SUFFIX != */* ]] && zstyle -a ":completion:${curcontext}:$tag" recursive-files rfiles; then
+	    local subtree
+	    subtree=( **/*(/) )
 	    for rfile in $rfiles; do
 	      if [[ $PWD/ = ${~rfile} ]]; then
-		for prepath in **/*(/); do
+		for prepath in $subtree; do
 		  _path_files -g "$pat" "$opts[@]" "$expl[@]" && ret=0

Barton E. Schaefer

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