summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--Completion/Builtins/_cd45
2 files changed, 28 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 541b05fde..ee6dfa094 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2000-09-07 Sven Wischnowsky <wischnow@zsh.org>
+ * 12769: Completion/Builtins/_cd: more sensible value
+
* 12768: as suggested by Andrej (12767): Completion/Bsd/_bsd_pkg,
Completion/Bsd/_kld, Completion/User/_gcc, Completion/User/_gdb,
Completion/User/_mailboxes, Completion/User/_zdump: stick some
diff --git a/Completion/Builtins/_cd b/Completion/Builtins/_cd
index 634a62c66..3abe26049 100644
--- a/Completion/Builtins/_cd
+++ b/Completion/Builtins/_cd
@@ -13,7 +13,7 @@
setopt localoptions nonomatch
-local expl
+local expl ret=1
if [[ CURRENT -eq 3 ]]; then
# cd old new: look for old in $PWD and see what can replace it
@@ -23,25 +23,32 @@ if [[ CURRENT -eq 3 ]]; then
# Now remove all the common parts of $PWD and the completions from this
rep=(${${rep#${PWD%%$words[2]*}}%${PWD#*$words[2]}})
(( $#rep )) && _wanted -C replacement strings expl replacement compadd -a rep
-elif _popd || [[ $PREFIX != (\~|/|./|../)* && $#cdpath -ne 0 ]]; then
- local tdir tdir2
-
- # With cdablevars, we can convert foo/bar/... to ~foo/bar/... if
- # there is no directory foo. In that case we could also complete
- # variable names, but it hardly seems worth it.
- # Note we need a tilde because cdablevars also allows user home
- # directories, hence we also need nonomatch to suppress error messages.
- if [[ -o cdablevars && -n "$PREFIX" && ! -d ${tdir::=${PREFIX%%/*}} &&
- -d ${~tdir2::="~$tdir"} ]]; then
+else
+ _popd && ret=0
+
+ if [[ $PREFIX != (\~|/|./|../)* && $#cdpath -ne 0 ]]; then
+ local tdir tdir2
+
+ # With cdablevars, we can convert foo/bar/... to ~foo/bar/... if
+ # there is no directory foo. In that case we could also complete
+ # variable names, but it hardly seems worth it.
+ # Note we need a tilde because cdablevars also allows user home
+ # directories, hence we also need nonomatch to suppress error messages.
+ if [[ -o cdablevars && -n "$PREFIX" && ! -d ${tdir::=${PREFIX%%/*}} &&
+ -d ${~tdir2::="~$tdir"} ]]; then
PREFIX="~$PREFIX"
- _wanted directories expl directory _path_files -/
+ _wanted directories expl directory _path_files -/ && ret=0
+ else
+ local tmpcdpath
+
+ tmpcdpath=(${${(@)cdpath:#.}:#$PWD})
+ _alternative \
+ 'local-directories:local directories:_path_files -/' \
+ "path-directories:directories in cdpath:_path_files -W tmpcdpath -/" && ret=0
+ fi
else
- local tmpcdpath
- tmpcdpath=(${${(@)cdpath:#.}:#$PWD})
- _alternative \
- 'local-directories:local directories:_path_files -/' \
- "path-directories:directories in cdpath:_path_files -W tmpcdpath -/"
+ _wanted directories expl directory _path_files -/ && ret=0
fi
-else
- _wanted directories expl directory _path_files -/
+
+ return ret
fi