diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2008-11-30 05:42:35 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2008-11-30 05:42:35 +0000 |
commit | 393e7e90897453c6fe4920ada27bdbdf7e313d05 (patch) | |
tree | 6d55c52cc1bc141833dc748f956b507229a6c70e /lisp/wdired.el | |
parent | a124190e811d57e6701339a475452542216dc9a4 (diff) | |
download | emacs-393e7e90897453c6fe4920ada27bdbdf7e313d05.tar.gz emacs-393e7e90897453c6fe4920ada27bdbdf7e313d05.tar.bz2 emacs-393e7e90897453c6fe4920ada27bdbdf7e313d05.zip |
(wdired-finish-edit): If displaying a single file, change
dired-directory if that file was renamed.
Diffstat (limited to 'lisp/wdired.el')
-rw-r--r-- | lisp/wdired.el | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el index e2d6a4b85b8..2ad186410ca 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -369,10 +369,11 @@ non-nil means return old filename." (interactive) (wdired-change-to-dired-mode) (let ((changes nil) - (files-deleted nil) - (file-renames ()) (errors 0) - file-ori file-new tmp-value) + files-deleted + files-renamed + some-file-names-unchanged + file-old file-new tmp-value) (save-excursion (when (and wdired-allow-to-redirect-links (fboundp 'make-symbolic-link)) @@ -386,20 +387,32 @@ non-nil means return old filename." (setq changes (or changes (car tmp-value)))) (goto-char (point-max)) (while (not (bobp)) - (setq file-ori (wdired-get-filename nil t)) - (when file-ori + (setq file-old (wdired-get-filename nil t)) + (when file-old (setq file-new (wdired-get-filename)) - (unless (equal file-new file-ori) + (if (equal file-new file-old) + (setq some-file-names-unchanged t) (setq changes t) (if (not file-new) ;empty filename! - (push file-ori files-deleted) - (push (cons file-ori (substitute-in-file-name file-new)) - file-renames)))) + (push file-old files-deleted) + (push (cons file-old (substitute-in-file-name file-new)) + files-renamed)))) (forward-line -1))) - (when file-renames - (setq errors (+ errors (wdired-do-renames file-renames)))) + (when files-renamed + (setq errors (+ errors (wdired-do-renames files-renamed)))) (if changes - (revert-buffer) ;The "revert" is necessary to re-sort the buffer + (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)))) + ;; Re-sort the buffer. + (revert-buffer)) (let ((inhibit-read-only t)) (remove-text-properties (point-min) (point-max) '(old-name nil end-name nil old-link nil |