From: Chong Yidong Date: Sat, 17 Jul 2010 21:25:32 +0000 (-0400) Subject: * lisp/dired.el (dired-buffers-for-dir): Handle list values of dired-directory (Bug... X-Git-Tag: emacs-pretest-23.2.90~139^2~51 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=dad7c7162bddfad0aa60648042f9a7f0d1255ee5;p=emacs.git * lisp/dired.el (dired-buffers-for-dir): Handle list values of dired-directory (Bug#6636). --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0ce0e8e3073..2ce2201f34b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2010-07-17 Chong Yidong + + * dired.el (dired-buffers-for-dir): Handle list values of + dired-directory (Bug#6636). + 2010-07-16 Reiner Steib * vc.el (vc-coding-system-inherit-eol): New defvar. diff --git a/lisp/dired.el b/lisp/dired.el index c3d1435401e..4a23865dfca 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -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)