* dirtrack.el (dirtrack): Support shell buffers with path
authorRyan Barrett <emacs@ryanb.org>
Mon, 17 Oct 2011 19:48:28 +0000 (21:48 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Mon, 17 Oct 2011 19:48:28 +0000 (21:48 +0200)
prefixes, e.g. tramp-based remote shells.  (Bug#9647)

lisp/ChangeLog
lisp/dirtrack.el

index 8034ceb..471b121 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-17  Ryan Barrett <emacs@ryanb.org>  (tiny change)
+
+       * dirtrack.el (dirtrack): Support shell buffers with path
+       prefixes, e.g. tramp-based remote shells.  (Bug#9647)
+
 2011-10-17  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * json.el: Bump version to 1.3 and note change in History.
index c3dfc74..23a0581 100644 (file)
@@ -227,7 +227,7 @@ If directory tracking does not seem to be working, you can use the
 function `dirtrack-debug-mode' to turn on debugging output."
   (unless (or (null dirtrack-mode)
               (eq (point) (point-min)))     ; no output?
-    (let (prompt-path
+    (let (prompt-path orig-prompt-path
          (current-dir default-directory)
          (dirtrack-regexp    (nth 0 dirtrack-list))
          (match-num          (nth 1 dirtrack-list)))
@@ -243,8 +243,9 @@ function `dirtrack-debug-mode' to turn on debugging output."
           (if (not (> (length prompt-path) 0))
               (dirtrack-debug-message "Match is empty string")
             ;; Transform prompts into canonical forms
-            (setq prompt-path (funcall dirtrack-directory-function
-                                       prompt-path)
+            (setq orig-prompt-path (funcall dirtrack-directory-function
+                                            prompt-path)
+                  prompt-path (shell-prefixed-directory-name orig-prompt-path)
                   current-dir (funcall dirtrack-canonicalize-function
                                        current-dir))
             (dirtrack-debug-message
@@ -257,8 +258,9 @@ function `dirtrack-debug-mode' to turn on debugging output."
               ;; It's possible that Emacs will think the directory
               ;; won't exist (eg, rlogin buffers)
               (if (file-accessible-directory-p prompt-path)
-                  ;; Change directory
-                  (and (shell-process-cd prompt-path)
+                  ;; Change directory. shell-process-cd adds the prefix, so we
+                  ;; need to give it the original (un-prefixed) path.
+                  (and (shell-process-cd orig-prompt-path)
                        (run-hooks 'dirtrack-directory-change-hook)
                        (dirtrack-debug-message
                         (format "Changing directory to %s" prompt-path)))