# HG changeset patch # User Chong Yidong # Date 1279401932 14400 # Node ID a13166a760620979aad247aaebf3f7b920e16d1d # Parent 507549811e3eab91937eb9f62dad7bf93c3607ba * lisp/dired.el (dired-buffers-for-dir): Handle list values of dired-directory (Bug#6636). diff -r 507549811e3e -r a13166a76062 lisp/ChangeLog --- a/lisp/ChangeLog Sat Jul 17 11:59:19 2010 +0200 +++ b/lisp/ChangeLog Sat Jul 17 17:25:32 2010 -0400 @@ -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 -r 507549811e3e -r a13166a76062 lisp/dired.el --- a/lisp/dired.el Sat Jul 17 11:59:19 2010 +0200 +++ b/lisp/dired.el Sat Jul 17 17:25:32 2010 -0400 @@ -2227,31 +2227,33 @@ ;; 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)