From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15814 invoked from network); 23 Dec 1999 21:52:53 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 23 Dec 1999 21:52:53 -0000 Received: (qmail 5245 invoked by alias); 23 Dec 1999 21:52:47 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 9149 Received: (qmail 5238 invoked from network); 23 Dec 1999 21:52:47 -0000 To: zsh-workers@sunsite.auc.dk (Zsh hackers list) Subject: PATCH: _cd not completing in $cdpath Date: Thu, 23 Dec 1999 21:54:06 +0000 From: Peter Stephenson Message-Id: (Andrej just reported this after I'd noticed it. I've left in the fact that . gets removed. I think this is to do with the local-directories and path-directories tag being separate; local files do get completed at some point.) _alternative re-evaluates arguments passed to it, so a string like '\(/home/pws /home/pws/tex\)' isn't good enough as a path for _path_files -W because it gets split on spaces, whereas _path_files needs it as a single argument. If that's the correct behaviour for _alternative --- and I suspect it is, because there are uses like _alternative 'files:: _files' 'parameters:: _parameters' --- then _cd needs fixing. The simple solution, passing the name of a parameter instead of the concocted string, took me ages to think of. It turns out then that an extra fix is required in _path_files for directories with spaces in: the parameter was split with an extra ${=...}, which seems to me unnecessary since it should be a proper array anyway, that's what they're for. Index: Completion/Builtins/_cd =================================================================== RCS file: /home/pws/CVSROOT/projects/zsh/Completion/Builtins/_cd,v retrieving revision 1.3 diff -u -r1.3 _cd --- Completion/Builtins/_cd 1999/12/15 19:44:32 1.3 +++ Completion/Builtins/_cd 1999/12/23 15:51:12 @@ -37,9 +37,11 @@ PREFIX="~$PREFIX" _path_files -/ else + local tmpcdpath + tmpcdpath=(${(@)cdpath:#.}) _alternative \ 'local-directories:local directories:_path_files -/' \ - "path-directories: directories in cdpath:_path_files -W \\(${${(@)cdpath:#.}}\\) -/" + "path-directories:directories in cdpath:_path_files -W tmpcdpath -/" fi else _path_files -/ Index: Completion/Core/_path_files =================================================================== RCS file: /home/pws/CVSROOT/projects/zsh/Completion/Core/_path_files,v retrieving revision 1.10 diff -u -r1.10 _path_files --- Completion/Core/_path_files 1999/12/15 19:44:32 1.10 +++ Completion/Core/_path_files 1999/12/23 15:47:25 @@ -44,7 +44,9 @@ if [[ "$tmp1[1]" = '(' ]]; then prepaths=( ${^=tmp1[2,-2]%/}/ ) else - prepaths=( ${(P)^=tmp1%/}/ ) + # In this case the variable should be an array, so + # don't use an extra ${=...}. + prepaths=( ${(P)^tmp1%/}/ ) (( ! $#prepaths )) && prepaths=( ${tmp1%/}/ ) fi (( ! $#prepaths )) && prepaths=( '' ) -- Peter Stephenson