summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Type/_canonical_paths4
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2676d0a17..c7b0b8d16 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2016-10-31  Barton E. Schaefer  <schaefer@zsh.org>
 
+	* 39795: Completion/Unix/Type/_canonical_paths: preserve "cd -"
+	behavior around directory shuffling in _canonical_paths_pwd
+
 	* 39792: Completion/Unix/Type/_canonical_paths: improve handling
 	of relative paths in _canonical_paths_add_paths
 
diff --git a/Completion/Unix/Type/_canonical_paths b/Completion/Unix/Type/_canonical_paths
index 6482602ac..4b6b0c05d 100644
--- a/Completion/Unix/Type/_canonical_paths
+++ b/Completion/Unix/Type/_canonical_paths
@@ -16,11 +16,13 @@
 _canonical_paths_pwd() {
   # Get the canonical directory name by changing to it.
   integer chaselinks
+  local oldpwd=$OLDPWD
   [[ -o chaselinks ]] && (( chaselinks = 1 ))
-  setopt localoptions nopushdignoredups chaselinks
+  setopt localoptions nopushdignoredups chaselinks noautopushd
   if builtin pushd -q -- $1 2>/dev/null; then
     REPLY=$PWD
     (( chaselinks )) || unsetopt chaselinks
+    [[ -n $oldpwd && -d $oldpwd ]] && builtin cd -q $oldpwd	# For "cd -"
     builtin popd -q
   else
     REPLY=$1