summaryrefslogtreecommitdiff
path: root/lisp/wdired.el
diff options
context:
space:
mode:
authorThierry Volpiatto <thievol@posteo.net>2022-08-23 12:03:22 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2022-08-23 12:03:22 +0200
commit66040fbeed284ade8577b8da1e5bf7fde3a958cc (patch)
treebfef3c49b84815926c6446c6be1485e73c65cd67 /lisp/wdired.el
parente2c766a20d9eb57db0371515773ca68b2de0e128 (diff)
downloademacs-66040fbeed284ade8577b8da1e5bf7fde3a958cc.tar.gz
emacs-66040fbeed284ade8577b8da1e5bf7fde3a958cc.tar.bz2
emacs-66040fbeed284ade8577b8da1e5bf7fde3a958cc.zip
Fix wdired with (dired '(dir f1 f2 ...))
* lisp/wdired.el (wdired-finish-edit): Fix wdired with (dired '(dir f1 f2 ...)) (bug#57334).
Diffstat (limited to 'lisp/wdired.el')
-rw-r--r--lisp/wdired.el31
1 files changed, 22 insertions, 9 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 106d57174d5..09f5b069f4b 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -537,15 +537,28 @@ non-nil means return old filename."
(wdired-change-to-dired-mode)
(if changes
(progn
- ;; If we are displaying a single file (rather than the
- ;; contents of a directory), change dired-directory if that
- ;; file was renamed. (This ought to be generalized to
- ;; handle the multiple files case, but that's less trivial).
- (when (and (stringp dired-directory)
- (not (file-directory-p dired-directory))
- (null some-file-names-unchanged)
- (= (length files-renamed) 1))
- (setq dired-directory (cdr (car files-renamed))))
+ (cond
+ ((and (stringp dired-directory)
+ (not (file-directory-p dired-directory))
+ (null some-file-names-unchanged)
+ (= (length files-renamed) 1))
+ ;; If we are displaying a single file (rather than the
+ ;; contents of a directory), change dired-directory if that
+ ;; file was renamed.
+ (setq dired-directory (cdr (car files-renamed))))
+ ((and (consp dired-directory)
+ (cdr dired-directory)
+ files-renamed)
+ ;; Fix dired buffers created with
+ ;; (dired '(foo f1 f2 f3)).
+ (setq dired-directory
+ (cons (car dired-directory)
+ ;; Replace in `dired-directory' files that have
+ ;; been modified with their new name keeping
+ ;; the ones that are unmodified at the same place.
+ (cl-loop for f in (cdr dired-directory)
+ collect (or (assoc-default f files-renamed)
+ f))))))
;; Re-sort the buffer.
(revert-buffer)
(let ((inhibit-read-only t))