diff options
| author | Lars Ingebrigtsen | 2022-06-17 14:47:16 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2022-06-17 14:48:31 +0200 |
| commit | 7daa552c681bb14fa97428e5888cfb545108ce1d (patch) | |
| tree | 5d8210aa74f26b8f15601f838fd87faff544985b | |
| parent | 4aca0d818f2d0b7dd7dc511907cc19f63758e482 (diff) | |
| download | emacs-7daa552c681bb14fa97428e5888cfb545108ce1d.tar.gz emacs-7daa552c681bb14fa97428e5888cfb545108ce1d.zip | |
Fix wdired marking of unsuccessfully renamed files
* lisp/wdired.el (wdired-finish-edit): Don't mark non-renamed
files as renamed (bug#46438).
| -rw-r--r-- | lisp/wdired.el | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el index d2a6bad0f28..a5858ed190e 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el | |||
| @@ -521,7 +521,15 @@ non-nil means return old filename." | |||
| 521 | files-renamed)))) | 521 | files-renamed)))) |
| 522 | (forward-line -1))) | 522 | (forward-line -1))) |
| 523 | (when files-renamed | 523 | (when files-renamed |
| 524 | (setq errors (+ errors (wdired-do-renames files-renamed)))) | 524 | (pcase-let ((`(,errs . ,successful-renames) |
| 525 | (wdired-do-renames files-renamed))) | ||
| 526 | (cl-incf errors errs) | ||
| 527 | ;; Some of the renames may fail -- in that case, don't mark an | ||
| 528 | ;; already-existing file with the same name as renamed. | ||
| 529 | (pcase-dolist (`(,file . _) wdired--old-marks) | ||
| 530 | (unless (member file successful-renames) | ||
| 531 | (setq wdired--old-marks | ||
| 532 | (assoc-delete-all file wdired--old-marks #'equal)))))) | ||
| 525 | ;; We have to be in wdired-mode when wdired-do-renames is executed | 533 | ;; We have to be in wdired-mode when wdired-do-renames is executed |
| 526 | ;; so that wdired--restore-properties runs, but we have to change | 534 | ;; so that wdired--restore-properties runs, but we have to change |
| 527 | ;; back to dired-mode before reverting the buffer to avoid using | 535 | ;; back to dired-mode before reverting the buffer to avoid using |
| @@ -566,7 +574,8 @@ non-nil means return old filename." | |||
| 566 | (errors 0) | 574 | (errors 0) |
| 567 | (total (1- (length renames))) | 575 | (total (1- (length renames))) |
| 568 | (prep (make-progress-reporter "Renaming" 0 total)) | 576 | (prep (make-progress-reporter "Renaming" 0 total)) |
| 569 | (overwrite (or (not wdired-confirm-overwrite) 1))) | 577 | (overwrite (or (not wdired-confirm-overwrite) 1)) |
| 578 | (successful-renames nil)) | ||
| 570 | (while (or renames | 579 | (while (or renames |
| 571 | ;; We've done one round through the renames, we have found | 580 | ;; We've done one round through the renames, we have found |
| 572 | ;; some residue, but we also made some progress, so maybe | 581 | ;; some residue, but we also made some progress, so maybe |
| @@ -617,13 +626,15 @@ non-nil means return old filename." | |||
| 617 | (wdired-create-parentdirs file-new)) | 626 | (wdired-create-parentdirs file-new)) |
| 618 | (dired-rename-file file-ori file-new | 627 | (dired-rename-file file-ori file-new |
| 619 | overwrite)) | 628 | overwrite)) |
| 629 | (:success | ||
| 630 | (push file-new successful-renames)) | ||
| 620 | (error | 631 | (error |
| 621 | (setq errors (1+ errors)) | 632 | (setq errors (1+ errors)) |
| 622 | (dired-log "Rename `%s' to `%s' failed:\n%s\n" | 633 | (dired-log "Rename `%s' to `%s' failed:\n%s\n" |
| 623 | file-ori file-new | 634 | file-ori file-new |
| 624 | err))))))))) | 635 | err))))))))) |
| 625 | (progress-reporter-done prep) | 636 | (progress-reporter-done prep) |
| 626 | errors)) | 637 | (cons errors successful-renames))) |
| 627 | 638 | ||
| 628 | (defun wdired-create-parentdirs (file-new) | 639 | (defun wdired-create-parentdirs (file-new) |
| 629 | "Create parent directories for FILE-NEW if they don't exist." | 640 | "Create parent directories for FILE-NEW if they don't exist." |