GNU bug report logs - #57334
28.1; Fix wdired with (dired '(dir f1 f2 ...))

Previous Next

Package: emacs;

Reported by: Thierry Volpiatto <thievol <at> posteo.net>

Date: Mon, 22 Aug 2022 06:37:01 UTC

Severity: normal

Tags: moreinfo

Found in version 28.1

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #46 received at 57334 <at> debbugs.gnu.org (full text, mbox):

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 57334 <at> debbugs.gnu.org
Subject: Re: bug#57334: 28.1; Fix wdired with (dired '(dir f1 f2 ...))
Date: Tue, 23 Aug 2022 04:50:20 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Thierry Volpiatto <thievol <at> posteo.net> writes:
>
>>> 3 unexpected results:
>>>    FAILED  wdired-test-bug32173-01
>>>    FAILED  wdired-test-bug32173-02
>>>    FAILED  wdired-test-bug34915
>>
>> Sorry but I am not a big fan of ERT, I have no idea what these tests do.
>
> If you say "make wdired-tests" in the "test" directory, the output will
> tell you what the problem is.  (I didn't examine the output myself.)

The tests succeed with following patch (avoid setting dired-directory to
nil).

diff --git a/lisp/wdired.el b/lisp/wdired.el
index 106d57174d5..40008f186eb 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -537,15 +537,27 @@ 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 (;; If we are displaying a single file (rather than the
+	         ;; contents of a directory), change dired-directory if that
+	         ;; file was renamed.
+                 (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))))
+                ;; Fix dired buffers created with
+                ;; (dired '(foo f1 f2 f3)).
+                ((and (consp dired-directory)
+                      (cdr dired-directory)
+                      files-renamed)
+                 (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))

-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 3 years and 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.