* lisp/dired.el (dired-buffers-for-dir): Handle list values of dired-directory (Bug...
authorChong Yidong <cyd@stupidchicken.com>
Sat, 17 Jul 2010 21:25:32 +0000 (17:25 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Sat, 17 Jul 2010 21:25:32 +0000 (17:25 -0400)
lisp/ChangeLog
lisp/dired.el

index 0ce0e8e..2ce2201 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-17  Chong Yidong  <cyd@stupidchicken.com>
+
+       * dired.el (dired-buffers-for-dir): Handle list values of
+       dired-directory (Bug#6636).
+
 2010-07-16  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * vc.el (vc-coding-system-inherit-eol): New defvar.
index c3d1435..4a23865 100644 (file)
@@ -2227,31 +2227,33 @@ You can then feed the file name(s) to other commands with \\[yank]."
 ;; Keeping Dired buffers in sync with the filesystem and with each other
 
 (defun dired-buffers-for-dir (dir &optional file)
-;; Return a list of buffers that dired DIR (top level or in-situ subdir).
+;; Return a list of buffers for DIR (top level or in-situ subdir).
 ;; If FILE is non-nil, include only those whose wildcard pattern (if any)
 ;; matches FILE.
 ;; The list is in reverse order of buffer creation, most recent last.
 ;; As a side effect, killed dired buffers for DIR are removed from
 ;; dired-buffers.
   (setq dir (file-name-as-directory dir))
-  (let ((alist dired-buffers) result elt buf)
-    (while alist
-      (setq elt (car alist)
-           buf (cdr elt))
-      (if (buffer-name buf)
-         (if (dired-in-this-tree dir (car elt))
-             (with-current-buffer buf
-               (and (assoc dir dired-subdir-alist)
-                    (or (null file)
-                        (let ((wildcards
-                               (file-name-nondirectory dired-directory)))
-                          (or (= 0 (length wildcards))
-                              (string-match (dired-glob-regexp wildcards)
-                                            file))))
-                    (setq result (cons buf result)))))
-       ;; else buffer is killed - clean up:
+  (let (result buf)
+    (dolist (elt dired-buffers)
+      (setq buf (cdr elt))
+      (cond
+       ((null (buffer-name buf))
+       ;; Buffer is killed - clean up:
        (setq dired-buffers (delq elt dired-buffers)))
-      (setq alist (cdr alist)))
+       ((dired-in-this-tree dir (car elt))
+       (with-current-buffer buf
+         (and (assoc dir dired-subdir-alist)
+              (or (null file)
+                  (if (stringp dired-directory)
+                      (let ((wildcards (file-name-nondirectory
+                                        dired-directory)))
+                        (or (= 0 (length wildcards))
+                            (string-match (dired-glob-regexp wildcards)
+                                          file)))
+                    (member (expand-file-name file dir)
+                            (cdr dired-directory))))
+              (setq result (cons buf result)))))))
     result))
 
 (defun dired-glob-regexp (pattern)