mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
(dired) <defgroup>: 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.
This commit is contained in:
parent
e5d31f9f63
commit
d7aed37c2e
2 changed files with 117 additions and 53 deletions
|
|
@ -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 <sk@thp.uni-koeln.de>
|
||||
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
(defgroup dired nil
|
||||
"Directory editing."
|
||||
:link '(custom-manual "(emacs)Dired")
|
||||
:group 'files)
|
||||
|
||||
(defgroup dired-mark nil
|
||||
|
|
@ -192,6 +193,7 @@ with the buffer narrowed to the listing."
|
|||
;; 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 @@ Subexpression 2 must end right before the \\n or \\r.")
|
|||
;;; "\\([-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 @@ Subexpression 2 must end right before the \\n or \\r.")
|
|||
|
||||
;;; 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 @@ for a remote directory. This feature is used by Auto Revert Mode."
|
|||
|
||||
;; 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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
|
||||
;; 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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
;; 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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
(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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
;; 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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
(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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
(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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
(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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
(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 @@ If HDR is non-nil, insert a header line with the directory name."
|
|||
'(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 @@ Keybindings:
|
|||
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 @@ A prefix argument says to unflag those files instead."
|
|||
(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'."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue