# HG changeset patch # User Stefan Monnier # Date 1080078245 0 # Node ID 924fccad3acbd39ef81c0bb9930a68179874e428 # Parent 87ca639a4eca8c0fca7db835930378e8a04132eb (dired) : Add link to manual. (dired-font-lock-keywords): Ad highlighting on unusual permissions. (dired-revert): Use dolist. (dired-mode-map): Add U binding. (dired-mode): Add font-lock-beginning-of-syntax-function. (dired-garbage-files-regexp): Make it a defcustom. diff -r 87ca639a4eca -r 924fccad3acb lisp/dired.el --- a/lisp/dired.el Tue Mar 23 21:36:49 2004 +0000 +++ b/lisp/dired.el Tue Mar 23 21:44:05 2004 +0000 @@ -1,6 +1,6 @@ ;;; dired.el --- directory-browsing commands -;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 1997, 2000, 2001, 2003 +;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 1997, 2000, 2001, 03, 2004 ;; Free Software Foundation, Inc. ;; Author: Sebastian Kremer @@ -39,6 +39,7 @@ (defgroup dired nil "Directory editing." + :link '(custom-manual "(emacs)Dired") :group 'files) (defgroup dired-mark nil @@ -192,6 +193,7 @@ ;; Note this can't simply be run inside function `dired-ls' as the hook ;; functions probably depend on the dired-subdir-alist to be OK. +;; Fixme: This should use mailcap. (defcustom dired-view-command-alist '(("[.]\\(ps\\|ps_pages\\|eps\\)\\'" . "gv -spartan -color -watch %s") ("[.]pdf\\'" . "xpdf %s") @@ -308,6 +310,16 @@ ;;; "\\([-d]\\(....w....\\|.......w.\\)\\)") ;;; '(1 font-lock-comment-face) ;;; '(".+" (dired-move-to-filename) nil (0 font-lock-comment-face))) + ;; However, we don't need to highlight the file name, only the + ;; permissions, to win generally. -- fx. + ;; Fixme: we could also put text properties on the permission + ;; fields with keymaps to frob the permissions, somewhat a la XEmacs. + (list (concat dired-re-maybe-mark dired-re-inode-size + "[-d]....\\(w\\)..\\(w\\).") ; group writable + '(1 font-lock-warning-face)) + (list (concat dired-re-maybe-mark dired-re-inode-size + "[-d]....\\(w\\)....") ; world writable + '(1 font-lock-comment-face)) ;; ;; Subdirectories. (list dired-re-dir @@ -327,12 +339,12 @@ ;;; Macros must be defined before they are used, for the byte compiler. -;; Mark all files for which CONDITION evals to non-nil. -;; CONDITION is evaluated on each line, with point at beginning of line. -;; MSG is a noun phrase for the type of files being marked. -;; It should end with a noun that can be pluralized by adding `s'. -;; Return value is the number of files marked, or nil if none were marked. (defmacro dired-mark-if (predicate msg) + "Mark all files for which PREDICATE evals to non-nil. +PREDICATE is evaluated on each line, with point at beginning of line. +MSG is a noun phrase for the type of files being marked. +It should end with a noun that can be pluralized by adding `s'. +Return value is the number of files marked, or nil if none were marked." `(let (buffer-read-only count) (save-excursion (setq count 0) @@ -634,10 +646,12 @@ ;; Read in a new dired buffer -;; dired-readin differs from dired-insert-subdir in that it accepts -;; wildcards, erases the buffer, and builds the subdir-alist anew -;; (including making it buffer-local and clearing it first). (defun dired-readin () + "Read in a new dired buffer. +Differs from dired-insert-subdir in that it accepts +wildcards, erases the buffer, and builds the subdir-alist anew +\(including making it buffer-local and clearing it first)." + ;; default-directory and dired-actual-switches must be buffer-local ;; and initialized by now. (let (dirname) @@ -756,6 +770,7 @@ ;; Make the file names highlight when the mouse is on them. (defun dired-insert-set-properties (beg end) + "Make the file names highlight when the mouse is on them." (save-excursion (goto-char beg) (while (< (point) end) @@ -774,10 +789,10 @@ ;; Reverting a dired buffer (defun dired-revert (&optional arg noconfirm) - ;; Reread the dired buffer. Must also be called after - ;; dired-actual-switches have changed. - ;; Should not fail even on completely garbaged buffers. - ;; Preserves old cursor, marks/flags, hidden-p. + "Reread the dired buffer. +Must also be called after dired-actual-switches have changed. +Should not fail even on completely garbaged buffers. +Preserves old cursor, marks/flags, hidden-p." (widen) ; just in case user narrowed (let ((opoint (point)) (ofile (dired-get-filename nil t)) @@ -804,10 +819,9 @@ (goto-char opoint)) ; was before (dired-move-to-filename) (save-excursion ; hide subdirs that were hidden - (mapcar (function (lambda (dir) - (if (dired-goto-subdir dir) - (dired-hide-subdir 1)))) - hidden-subdirs))) + (dolist (dir hidden-subdirs) + (if (dired-goto-subdir dir) + (dired-hide-subdir 1))))) ;; outside of the let scope ;;; Might as well not override the user if the user changed this. ;;; (setq buffer-read-only t) @@ -817,7 +831,7 @@ ;; Some of these are also used when inserting subdirs. (defun dired-remember-marks (beg end) - ;; Return alist of files and their marks, from BEG to END. + "Return alist of files and their marks, from BEG to END." (if selective-display ; must unhide to make this work. (let (buffer-read-only) (subst-char-in-region beg end ?\r ?\n))) @@ -830,9 +844,9 @@ alist (cons (cons fil chr) alist))))) alist)) -;; Mark all files remembered in ALIST. -;; Each element of ALIST looks like (FILE . MARKERCHAR). (defun dired-mark-remembered (alist) + "Mark all files remembered in ALIST. +Each element of ALIST looks like (FILE . MARKERCHAR)." (let (elt fil chr) (while alist (setq elt (car alist) @@ -845,8 +859,8 @@ (delete-char 1) (insert chr)))))) -;; Return a list of names of subdirs currently hidden. (defun dired-remember-hidden () + "Return a list of names of subdirs currently hidden." (let ((l dired-subdir-alist) dir pos result) (while l (setq dir (car (car l)) @@ -858,9 +872,9 @@ (setq result (cons dir result)))) result)) -;; Try to insert all subdirs that were displayed before, -;; according to the former subdir alist OLD-SUBDIR-ALIST. (defun dired-insert-old-subdirs (old-subdir-alist) + "Try to insert all subdirs that were displayed before. +Do so according to the former subdir alist OLD-SUBDIR-ALIST." (or (string-match "R" dired-actual-switches) (let (elt dir) (while old-subdir-alist @@ -873,20 +887,17 @@ (dired-insert-subdir dir)) (error nil)))))) -;; Remove directory DIR from any directory cache. (defun dired-uncache (dir) + "Remove directory DIR from any directory cache." (let ((handler (find-file-name-handler dir 'dired-uncache))) (if handler (funcall handler 'dired-uncache dir)))) ;; dired mode key bindings and initialization -(defvar dired-mode-map nil "Local keymap for dired-mode buffers.") -(if dired-mode-map - nil +(defvar dired-mode-map ;; This looks ugly when substitute-command-keys uses C-d instead d: ;; (define-key dired-mode-map "\C-d" 'dired-flag-file-deletion) - (let ((map (make-keymap))) (suppress-keymap map) (define-key map [mouse-2] 'dired-mouse-find-file-other-window) @@ -951,6 +962,7 @@ (define-key map "*u" 'dired-unmark) (define-key map "*?" 'dired-unmark-all-files) (define-key map "*!" 'dired-unmark-all-marks) + (define-key map "U" 'dired-unmark-all-marks) (define-key map "*\177" 'dired-unmark-backward) (define-key map "*\C-n" 'dired-next-marked-file) (define-key map "*\C-p" 'dired-prev-marked-file) @@ -1210,7 +1222,8 @@ '(menu-item "Copy to..." dired-do-copy :help "Copy current file or all marked files")) - (setq dired-mode-map map))) + map) + "Local keymap for `dired-mode' buffers.") ;; Dired mode is suitable only for specially formatted data. (put 'dired-mode 'mode-class 'special) @@ -1308,7 +1321,8 @@ dired-directory))) (set (make-local-variable 'dired-actual-switches) (or switches dired-listing-switches)) - (set (make-local-variable 'font-lock-defaults) '(dired-font-lock-keywords t)) + (set (make-local-variable 'font-lock-defaults) + '(dired-font-lock-keywords t nil nil beginning-of-line)) (dired-sort-other dired-actual-switches t) (run-hooks 'dired-mode-hook) (when (featurep 'x-dnd) @@ -2635,11 +2649,15 @@ (file-name-nondirectory fn))))) "auto save file"))) -(defvar dired-garbage-files-regexp +(defcustom dired-garbage-files-regexp + ;; `log' here is dubious, ssince it's typically used for useful log + ;; files, not just TeX stuff. -- fx (concat (regexp-opt '(".log" ".toc" ".dvi" ".bak" ".orig" ".rej" ".aux")) "\\'") - "*Regular expression to match \"garbage\" files for `dired-flag-garbage-files'.") + "Regular expression to match \"garbage\" files for `dired-flag-garbage-files'." + :type 'regexp + :group 'dired) (defun dired-flag-garbage-files () "Flag for deletion all files that match `dired-garbage-files-regexp'."