diff options
author | Eli Zaretskii <eliz@gnu.org> | 2022-04-13 16:52:50 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-04-13 16:52:50 +0300 |
commit | 5a14406ecfbd1efd03a00c49a84c19d31bb77f48 (patch) | |
tree | 0ef3345816636a1530806b2585ba1f40c30c84de /lisp/dired.el | |
parent | be42fdc6dc60bec1d14065d04dc43b693398c591 (diff) | |
parent | f2ae39829812098d8269eafbc0fcb98959ee5bb7 (diff) | |
download | emacs-5a14406ecfbd1efd03a00c49a84c19d31bb77f48.tar.gz emacs-5a14406ecfbd1efd03a00c49a84c19d31bb77f48.tar.bz2 emacs-5a14406ecfbd1efd03a00c49a84c19d31bb77f48.zip |
Merge from origin/emacs-28
# Conflicts:
# etc/NEWS
# lisp/desktop.el
# lisp/dired.el
Diffstat (limited to 'lisp/dired.el')
-rw-r--r-- | lisp/dired.el | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/lisp/dired.el b/lisp/dired.el index 5accad8efd2..d0cf72adc58 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -3063,12 +3063,10 @@ 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 subdirs) +(defun dired-buffers-for-dir (dir &optional file) "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. 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'." @@ -3080,20 +3078,35 @@ As a side effect, killed dired buffers for DIR are removed from ((null (buffer-name buf)) ;; Buffer is killed - clean up: (setq dired-buffers (delq elt dired-buffers))) - ((dired-in-this-tree-p (car elt) dir) + ((dired-in-this-tree-p dir (car elt)) (with-current-buffer buf - (when (and (or subdirs - (assoc dir dired-subdir-alist)) - (or (null file) - (if (stringp dired-directory) - (let ((wildcards (file-name-nondirectory - dired-directory))) - (or (zerop (length wildcards)) - (string-match-p (dired-glob-regexp wildcards) - file))) - (member (expand-file-name file dir) - (cdr dired-directory))))) - (setq result (cons buf result))))))) + (and (assoc dir dired-subdir-alist) + (or (null file) + (if (stringp dired-directory) + (let ((wildcards (file-name-nondirectory + dired-directory))) + (or (zerop (length wildcards)) + (string-match-p (dired-glob-regexp wildcards) + file))) + (member (expand-file-name file dir) + (cdr dired-directory)))) + (setq result (cons buf result))))))) + result)) + +(defun dired-buffers-for-dir-or-subdir (dir) + "Return a list of buffers for DIR or a subdirectory thereof. +As a side effect, killed dired buffers for DIR are removed from +`dired-buffers'." + (setq dir (file-name-as-directory dir)) + (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))) + ((dired-in-this-tree-p (car elt) dir) + (setq result (cons buf result))))) result)) (defun dired-glob-regexp (pattern) @@ -3672,14 +3685,16 @@ confirmation. To disable the confirmation, see (file-name-nondirectory fn)))) (not dired-clean-confirm-killing-deleted-buffers)) (kill-buffer buf))) - (let ((buf-list (dired-buffers-for-dir fn nil 'subdirs))) + (let ((buf-list (dired-buffers-for-dir-or-subdir + (expand-file-name fn)))) (and buf-list (or (and dired-clean-confirm-killing-deleted-buffers (y-or-n-p (format - (ngettext "Kill Dired buffer of %s, too? " - "Kill Dired buffers of %s, too? " - (length buf-list)) + (ngettext + "Kill Dired buffer of %s, too? " + "Kill Dired buffers of %s and its sub-directories, too? " + (length buf-list)) (file-name-nondirectory ;; FN may end in a / if `dired-listing-switches' ;; contains -p, so we need to strip that |