diff --git a/lisp/dired.el b/lisp/dired.el index 75dcd33e67..972a0865f4 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -2874,8 +2874,9 @@ dired-buffers-for-dir "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. -If SUBDIRS is non-nil, also include the dired buffers of -directories below DIR. +If SUBDIRS is non-nil, include the dired buffers of DIR and the +directories below DIR instead (but no dired buffers with in-situ +subdir DIR). 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'." @@ -2887,10 +2888,9 @@ dired-buffers-for-dir ((null (buffer-name buf)) ;; Buffer is killed - clean up: (setq dired-buffers (delq elt dired-buffers))) - ((dired-in-this-tree-p dir (car elt)) + ((and (null subdirs) (dired-in-this-tree-p dir (car elt))) (with-current-buffer buf - (when (and (or subdirs - (assoc dir dired-subdir-alist)) + (when (and (assoc dir dired-subdir-alist) (or (null file) (if (stringp dired-directory) (let ((wildcards (file-name-nondirectory @@ -2900,7 +2900,9 @@ dired-buffers-for-dir file))) (member (expand-file-name file dir) (cdr dired-directory))))) - (setq result (cons buf result))))))) + (setq result (cons buf result))))) + ((and subdirs (dired-in-this-tree-p (car elt) dir)) + (setq result (cons buf result))))) result)) (defun dired-glob-regexp (pattern)