X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f6d346c940bfd988b49881ef78bf59afcd2cdeb9..73b0cd50031a714347109169ceb8bacae338612a:/lisp/wdired.el diff --git a/lisp/wdired.el b/lisp/wdired.el index fe14bce178..463e0ff94d 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -1,6 +1,7 @@ ;;; wdired.el --- Rename files editing their names in dired buffers -;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2004-2011 +;; Free Software Foundation, Inc. ;; Filename: wdired.el ;; Author: Juan León Lahoz García @@ -369,10 +370,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 +388,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 @@ -472,7 +486,7 @@ non-nil means return old filename." file-new "' failed:\n%s\n") err))))))))) errors)) - + (defun wdired-exit () "Exit wdired and return to dired mode. @@ -503,12 +517,11 @@ and proceed depending on the answer." (setq curr-filename (wdired-get-filename nil t)) (if (equal curr-filename filename-ori) (progn - (setq exit-while t) + (setq done t) (let ((inhibit-read-only t)) (dired-move-to-filename) (search-forward (wdired-get-filename t) nil t) (replace-match (file-name-nondirectory filename-ori) t t)) - (setq done) (dired-do-create-files-regexp (function dired-rename-file) "Move" 1 ".*" filename-new nil t)) @@ -540,7 +553,7 @@ Optional arguments are ignored." (if (and (buffer-modified-p) (not (y-or-n-p "Buffer changed. Discard changes and kill buffer? "))) - (error "Error."))) + (error "Error"))) (defun wdired-next-line (arg) "Move down lines then position at filename or the current column. @@ -729,9 +742,9 @@ Like original function but it skips read-only words." (defun wdired-set-bit () "Set a permission bit character." (interactive) - (if (wdired-perm-allowed-in-pos last-command-char + (if (wdired-perm-allowed-in-pos last-command-event (- (current-column) wdired-col-perm)) - (let ((new-bit (char-to-string last-command-char)) + (let ((new-bit (char-to-string last-command-event)) (inhibit-read-only t) (pos-prop (- (point) (- (current-column) wdired-col-perm)))) (put-text-property 0 1 'keymap wdired-perm-mode-map new-bit) @@ -828,5 +841,4 @@ Like original function but it skips read-only words." ;; byte-compile-dynamic: t ;; End: -;; arch-tag: bc00902e-526f-4305-bc7f-8862a559184f ;;; wdired.el ends here