diff options
author | Michael Heerdegen <michael_heerdegen@web.de> | 2012-10-17 11:11:49 +0200 |
---|---|---|
committer | Martin Rudalics <rudalics@gmx.at> | 2012-10-17 11:11:49 +0200 |
commit | 7ebc5f5a07b71eada164b9e115eb40a2c03b0f95 (patch) | |
tree | 25d416175d9b2546ab677cd511adaba6fd27dddc /lisp/wdired.el | |
parent | d556ebf9b8a36596d752e284d227173c852d4eb8 (diff) | |
download | emacs-7ebc5f5a07b71eada164b9e115eb40a2c03b0f95.tar.gz |
When renaming a file with wdired move point with file and don't lose mark status (Bug#11795).
* wdired.el (wdired-old-marks): New variable.
(wdired-change-to-wdired-mode): Locally set wdired-old-marks.
(wdired-do-renames): Move point with renamed file and don't lose
mark status (Bug#11795).
Diffstat (limited to 'lisp/wdired.el')
-rw-r--r-- | lisp/wdired.el | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el index b893e8f6f2b..266d1993389 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -180,7 +180,7 @@ program `dired-chmod-program', which must exist." (defvar wdired-col-perm) ;; Column where the permission bits start (defvar wdired-old-content) (defvar wdired-old-point) - +(defvar wdired-old-marks) (defun wdired-mode () "Writable Dired (WDired) mode. @@ -221,6 +221,8 @@ See `wdired-mode'." (error "Not a Dired buffer")) (set (make-local-variable 'wdired-old-content) (buffer-substring (point-min) (point-max))) + (set (make-local-variable 'wdired-old-marks) + (dired-remember-marks (point-min) (point-max))) (set (make-local-variable 'wdired-old-point) (point)) (set (make-local-variable 'query-replace-skip-read-only) t) (set (make-local-variable 'isearch-filter-predicate) @@ -455,7 +457,8 @@ non-nil means return old filename." (push (cons tmp file-new) residue)))) (t (setq progress t) - (let ((file-ori (car rename))) + (let* ((file-ori (car rename)) + (old-mark (cdr (assoc file-ori wdired-old-marks)))) (if wdired-use-interactive-rename (wdired-search-and-rename file-ori file-new) ;; If dired-rename-file autoloads dired-aux while @@ -466,12 +469,17 @@ non-nil means return old filename." (condition-case err (let ((dired-backup-overwrite nil)) (dired-rename-file file-ori file-new - overwrite)) + overwrite) + (dired-remove-file file-ori) + (dired-add-file file-new (if (integerp dired-keep-marker-rename) + dired-keep-marker-rename + old-mark))) (error (setq errors (1+ errors)) (dired-log (concat "Rename `" file-ori "' to `" file-new "' failed:\n%s\n") - err))))))))) + err) + (dired-add-entry file-ori old-mark))))))))) errors)) |