;;; 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 <juanleon1@gmail.com>
;;
;; - To mark files for deletion, by deleting their whole filename.
-;;; Installation:
-
-;; Add this file (byte-compiling it is recommended) to your load-path.
-;; Then add one of these set of lines (or similar ones) to your config:
-;;
-;; This is the easy way:
-;;
-;; (require 'wdired)
-;; (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
-;;
-;; This is the recommended way for faster Emacs startup time and lower
-;; memory consumption:
-;;
-;; (autoload 'wdired-change-to-wdired-mode "wdired")
-;; (eval-after-load "dired"
-;; '(lambda ()
-;; (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
-;; (define-key dired-mode-map
-;; [menu-bar immediate wdired-change-to-wdired-mode]
-;; '("Edit File Names" . wdired-change-to-wdired-mode))))
-;;
-;; Type "M-x customize-group RET wdired" if you want to make changes
-;; to the default behavior.
-
;;; Usage:
-;; Then, you can start editing the names of the files by typing "r"
-;; (or whatever key you choose, or M-x wdired-change-to-wdired-mode).
-;; Use C-c C-c when finished or C-c C-k to abort. You can use also the
-;; menu options: in dired mode, "Edit File Names" under "Immediate".
-;; While editing the names, a new submenu "WDired" is available at top
-;; level. You can customize the behavior of this package from this
-;; menu.
+;; You can edit the names of the files by typing C-x C-q or by
+;; executing M-x wdired-change-to-wdired-mode. Use C-c C-c when
+;; finished or C-c C-k to abort. While editing filenames, a new
+;; submenu "WDired" is available at top level. You can customize the
+;; behavior of this package from this menu.
;;; Change Log:
(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))
(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
file-new "' failed:\n%s\n")
err)))))))))
errors))
-
+
(defun wdired-exit ()
"Exit wdired and return to dired mode.
(interactive)
(customize-apropos "wdired" 'groups))
-(defun wdired-revert (&optional arg noconfirm)
+(defun wdired-revert (&optional _arg _noconfirm)
"Discard changes in the buffer and update it based on changes on disk.
Optional arguments are ignored."
(wdired-change-to-dired-mode)
(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.
(if (< arg 0)
(funcall command arg)
(while (> arg 0)
- (condition-case err
+ (condition-case nil
(progn
(funcall command 1)
(setq arg (1- arg)))
(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)
;; byte-compile-dynamic: t
;; End:
-;; arch-tag: bc00902e-526f-4305-bc7f-8862a559184f
;;; wdired.el ends here