From: Stefan Monnier Date: Fri, 23 Apr 2004 22:22:13 +0000 (+0000) Subject: (wdired-mode-map): Move init into declaration. Fix `return' binding. X-Git-Tag: ttn-vms-21-2-B4~6625 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d549a7dfb249842ae4548705ba237f4edd7ebb1c;p=emacs.git (wdired-mode-map): Move init into declaration. Fix `return' binding. (wdired-change-to-wdired-mode, wdired-change-to-dired-mode): Use force-mode-line-update. (wdired-get-filename): Use `unless'. (wdired-preprocess-files): Don't assume names have no \n and use / for dirsep. (wdired-normalize-filename): Use replace-regexp-in-string. (wdired-load-hooks): Remove. (wdired-mode-hooks): Rename to wdired-mode-hook. --- diff --git a/lisp/wdired.el b/lisp/wdired.el index 16951fe2aa9..a8c36c2066f 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -30,7 +30,7 @@ ;; renaming files. ;; ;; Have you ever wished to use C-x r t (string-rectangle), M-% -;; (query-replace), M-c (capitalize-word), etc to change the name of +;; (query-replace), M-c (capitalize-word), etc. to change the name of ;; the files in a "dired" buffer? Now you can do this. All the power ;; of emacs commands are available to renaming files! ;; @@ -113,7 +113,7 @@ ;; - Another alternative way of editing permissions allowed, see ;; `wdired-allow-to-change-permissions' for details. ;; -;; - Now wdired doesn`t relies in regexp so much. As a consequence of +;; - Now wdired doesn't rely on regexp so much. As a consequence of ;; this, you can add newlines to filenames and symlinks targets ;; (although this is not very usual, IMHO). Please note that dired ;; (at least in Emacs 21.1 and previous) does not work very well @@ -121,8 +121,8 @@ ;; wdired mode. But you can activate it if you want. ;; ;; - Now `upcase-word' `capitalize-word' and `downcase-word' are not -;; advised to work better with wdired mode, but the keys binded to -;; them use wdired versions of that commands. +;; advised to work better with wdired mode, but the keys bound to +;; them use wdired versions of those commands. ;; ;; - Now "undo" actions are not inherited from wdired mode when ;; changing to dired mode. @@ -158,7 +158,6 @@ (eval-when-compile (require 'advice) - (defvar make-symbolic-link) ;Avoid a compilation warning in NTEmacs (defvar dired-backup-overwrite) ; Only in emacs 20.x this is a custom var (set (make-local-variable 'byte-compile-dynamic) t)) @@ -238,49 +237,45 @@ intelligible value. Anyway, the real change of the permissions is done with the external program `dired-chmod-program', which must exist." :type '(choice (const :tag "Not allowed" nil) - (const :tag "Toggle/set bits" t) + (const :tag "Toggle/set bits" t) (other :tag "Bits freely editable" advanced)) :group 'wdired) -(define-key dired-mode-map [menu-bar immediate wdired-change-to-wdired-mode] - '("Edit File Names" . wdired-change-to-wdired-mode)) - -(defvar wdired-mode-map nil) -(unless wdired-mode-map - (setq wdired-mode-map (make-sparse-keymap)) - (define-key wdired-mode-map "\C-x\C-s" 'wdired-finish-edit) - (define-key wdired-mode-map "\C-c\C-c" 'wdired-finish-edit) - (define-key wdired-mode-map "\C-c\C-k" 'wdired-abort-changes) - (define-key wdired-mode-map "\C-c\C-[" 'wdired-abort-changes) - (define-key wdired-mode-map [return] 'wdired-newline) - (define-key wdired-mode-map "\C-j" 'wdired-newline) - (define-key wdired-mode-map "\C-o" 'wdired-newline) - (define-key wdired-mode-map [up] 'wdired-previous-line) - (define-key wdired-mode-map "\C-p" 'wdired-previous-line) - (define-key wdired-mode-map [down] 'wdired-next-line) - (define-key wdired-mode-map "\C-n" 'wdired-next-line) - (define-key wdired-mode-map [menu-bar wdired] - (cons "WDired" (make-sparse-keymap "WDired"))) - (define-key wdired-mode-map [menu-bar wdired wdired-customize] - '("Options" . wdired-customize)) - (define-key wdired-mode-map [menu-bar wdired dashes] +(defvar wdired-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-x\C-s" 'wdired-finish-edit) + (define-key map "\C-c\C-c" 'wdired-finish-edit) + (define-key map "\C-c\C-k" 'wdired-abort-changes) + (define-key map "\C-c\C-[" 'wdired-abort-changes) + (define-key map "\C-m" 'wdired-newline) + (define-key map "\C-j" 'wdired-newline) + (define-key map "\C-o" 'wdired-newline) + (define-key map [up] 'wdired-previous-line) + (define-key map "\C-p" 'wdired-previous-line) + (define-key map [down] 'wdired-next-line) + (define-key map "\C-n" 'wdired-next-line) + + (define-key map [menu-bar wdired] + (cons "WDired" (make-sparse-keymap "WDired"))) + (define-key map [menu-bar wdired wdired-customize] + '("Options" . wdired-customize)) + (define-key map [menu-bar wdired dashes] '("--")) - (define-key wdired-mode-map [menu-bar wdired wdired-abort-changes] - '("Abort Changes" . wdired-abort-changes)) - (define-key wdired-mode-map [menu-bar wdired wdired-finish-edit] - '("Validate Changes" . wdired-finish-edit)) - (substitute-key-definition 'upcase-word 'wdired-upcase-word - wdired-mode-map global-map) - (substitute-key-definition 'capitalize-word 'wdired-capitalize-word - wdired-mode-map global-map) - (substitute-key-definition 'downcase-word 'wdired-downcase-word - wdired-mode-map global-map)) - -(defvar wdired-mode-hooks nil - "Hooks run when changing to wdired mode.") - -(defvar wdired-load-hooks nil - "Hooks run after loading wdired code.") + (define-key map [menu-bar wdired wdired-abort-changes] + '("Abort Changes" . wdired-abort-changes)) + (define-key map [menu-bar wdired wdired-finish-edit] + '("Commit Changes" . wdired-finish-edit)) + ;; FIXME: Use the new remap trick. + (substitute-key-definition 'upcase-word 'wdired-upcase-word + map global-map) + (substitute-key-definition 'capitalize-word 'wdired-capitalize-word + map global-map) + (substitute-key-definition 'downcase-word 'wdired-downcase-word + map global-map) + map)) + +(defvar wdired-mode-hook nil + "Hook run when changing to wdired mode.") ;; Local variables (put here to avoid compilation gripes) (defvar wdired-col-perm) ;; Column where the permission bits start @@ -307,7 +302,7 @@ not allowed, because the rest of the buffer is read-only." ;;;###autoload (defun wdired-change-to-wdired-mode () "Put a dired buffer in a mode in which filenames are editable. -In this mode the names of the files can be changed, and after +In this mode the names of the files can be changed, and after typing C-c C-c the files and directories in disk are renamed. See `wdired-mode'." @@ -315,10 +310,9 @@ See `wdired-mode'." (set (make-local-variable 'wdired-old-content) (buffer-substring (point-min) (point-max))) (use-local-map wdired-mode-map) - (menu-bar-mode (or menu-bar-mode -1)) ;Force redisplay menu + (force-mode-line-update) (setq buffer-read-only nil) (dired-unadvertise default-directory) - (make-local-hook 'kill-buffer-hook) (add-hook 'kill-buffer-hook 'wdired-check-kill-buffer nil t) (setq major-mode 'wdired-mode) (setq mode-name "Edit filenames") @@ -335,7 +329,7 @@ See `wdired-mode'." (buffer-enable-undo) ; Performance hack. See above. (set-buffer-modified-p nil) (setq buffer-undo-list nil) - (run-hooks wdired-mode-hooks) + (run-hooks wdired-mode-hook) (message "Press C-c C-c when finished")) @@ -349,24 +343,24 @@ See `wdired-mode'." filename) (while (not (eobp)) (setq filename (dired-get-filename nil t)) - (if (and filename (not (string-match "/\\.\\.?$" filename))) - (progn - (dired-move-to-filename) - (put-text-property (- (point) 2) (1- (point)) 'old-name filename) - (put-text-property b-protection (1- (point)) 'read-only t) - (setq b-protection (dired-move-to-end-of-filename t)))) - (put-text-property (point) (1+ (point)) 'end-name t) + (when (and filename + (not (member (file-name-nondirectory filename) '("." "..")))) + (dired-move-to-filename) + (put-text-property (- (point) 2) (1- (point)) 'old-name filename) + (put-text-property b-protection (1- (point)) 'read-only t) + (setq b-protection (dired-move-to-end-of-filename t))) + (put-text-property (point) (1+ (point)) 'end-name t) (forward-line)) (put-text-property b-protection (point-max) 'read-only t)))) ;; This code is a copy of some dired-get-filename lines. (defsubst wdired-normalize-filename (file) (setq file + ;; FIXME: shouldn't we check for a `b' argument or somesuch before + ;; doing such unquoting? --Stef (read (concat - "\"" (or (dired-string-replace-match - "\\([^\\]\\|\\`\\)\"" file - "\\1\\\\\"" nil t) - file) + "\"" (replace-regexp-in-string + "\\([^\\]\\|\\`\\)\"" "\\1\\\\\"" file) "\""))) (and file buffer-file-coding-system (not file-name-coding-system) @@ -376,22 +370,22 @@ See `wdired-mode'." (defun wdired-get-filename (&optional no-dir old) "Return the filename at line. -Similar to `dired-get-filename' but it doesn't relies in regexps. It -relies in wdired buffer's properties. Optional arg NO-DIR with value +Similar to `dired-get-filename' but it doesn't rely on regexps. It +relies on wdired buffer's properties. Optional arg NO-DIR with value non-nil means don't include directory. Optional arg OLD with value non-nil means return old filename." + ;; FIXME: Use dired-get-filename's new properties. (let (beg end file) (save-excursion (setq end (progn (end-of-line) (point))) (beginning-of-line) (setq beg (next-single-property-change (point) 'old-name nil end)) - (if (not (eq beg end)) - (progn - (if old - (setq file (get-text-property beg 'old-name)) - (setq end (next-single-property-change (1+ beg) 'end-name)) - (setq file (buffer-substring-no-properties (+ 2 beg) end))) - (and file (setq file (wdired-normalize-filename file))))) + (unless (eq beg end) + (if old + (setq file (get-text-property beg 'old-name)) + (setq end (next-single-property-change (1+ beg) 'end-name)) + (setq file (buffer-substring-no-properties (+ 2 beg) end))) + (and file (setq file (wdired-normalize-filename file)))) (if (or no-dir old) file (and file (> (length file) 0) @@ -405,7 +399,7 @@ non-nil means return old filename." '(read-only nil local-map nil))) (put-text-property 1 2 'front-sticky nil) (use-local-map dired-mode-map) - (menu-bar-mode (or menu-bar-mode -1)) ;Force redisplay menu + (force-mode-line-update) (setq buffer-read-only t) (setq major-mode 'dired-mode) (setq mode-name "Dired") @@ -533,6 +527,7 @@ non-nil means return old filename." (wdired-change-to-wdired-mode)) (defun wdired-check-kill-buffer () + ;; FIXME: Can't we use the normal mechanism for that? --Stef (if (and (buffer-modified-p) (not (y-or-n-p "Buffer changed. Discard changes and kill buffer? "))) @@ -872,9 +867,6 @@ commands. This advice only has effect in wdired mode." (cons changes errors))) (provide 'wdired) -(run-hooks wdired-load-hooks) +;; arch-tag: bc00902e-526f-4305-bc7f-8862a559184f ;;; wdired.el ends here - - -;;; arch-tag: bc00902e-526f-4305-bc7f-8862a559184f