emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 66040fbeed: Fix wdired with (dired '(dir f1 f2 ...))


From: Lars Ingebrigtsen
Subject: master 66040fbeed: Fix wdired with (dired '(dir f1 f2 ...))
Date: Tue, 23 Aug 2022 06:05:23 -0400 (EDT)

branch: master
commit 66040fbeed284ade8577b8da1e5bf7fde3a958cc
Author: Thierry Volpiatto <thievol@posteo.net>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Fix wdired with (dired '(dir f1 f2 ...))
    
    * lisp/wdired.el (wdired-finish-edit): Fix wdired with (dired
    '(dir f1 f2 ...)) (bug#57334).
---
 lisp/wdired.el | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/lisp/wdired.el b/lisp/wdired.el
index 106d57174d..09f5b069f4 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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]