;;; dired.el --- directory-browsing commands
;; Copyright (C) 1985, 1986, 1992, 1993, 1994, 1995, 1996, 1997, 2000,
-;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
;; Maintainer: FSF
`dired-ls-F-marks-symlinks' concerning the `F' switch.
On systems such as MS-DOS and MS-Windows, which use `ls' emulation in Lisp,
some of the `ls' switches are not supported; see the doc string of
-`insert-directory' on `ls-lisp.el' for more details."
+`insert-directory' in `ls-lisp.el' for more details."
:type 'string
:group 'dired)
;; treat top level dir extra (it may contain wildcards)
(dired-uncache
(if (consp dired-directory) (car dired-directory) dired-directory))
- (dired-readin)
+ ;; Run dired-after-readin-hook just once, below.
(let ((dired-after-readin-hook nil))
- ;; don't run that hook for each subdir...
+ (dired-readin)
(dired-insert-old-subdirs old-subdir-alist))
(dired-mark-remembered mark-alist) ; mark files that were marked
;; ... run the hook for the whole buffer, and only after markers
(define-key map "\177" 'dired-unmark-backward)
(define-key map [remap undo] 'dired-undo)
(define-key map [remap advertised-undo] 'dired-undo)
- ;; thumbnail manipulation (tumme)
- (define-key map "\C-td" 'tumme-display-thumbs)
- (define-key map "\C-tt" 'tumme-tag-files)
- (define-key map "\C-tr" 'tumme-delete-tag)
- (define-key map "\C-tj" 'tumme-jump-thumbnail-buffer)
- (define-key map "\C-ti" 'tumme-dired-display-image)
- (define-key map "\C-tx" 'tumme-dired-display-external)
- (define-key map "\C-ta" 'tumme-display-thumbs-append)
- (define-key map "\C-t." 'tumme-display-thumb)
- (define-key map "\C-tc" 'tumme-dired-comment-files)
- (define-key map "\C-tf" 'tumme-mark-tagged-files)
- (define-key map "\C-t\C-t" 'tumme-dired-insert-marked-thumbs)
- (define-key map "\C-te" 'tumme-dired-edit-comment-and-tags)
+ ;; thumbnail manipulation (image-dired)
+ (define-key map "\C-td" 'image-dired-display-thumbs)
+ (define-key map "\C-tt" 'image-dired-tag-files)
+ (define-key map "\C-tr" 'image-dired-delete-tag)
+ (define-key map "\C-tj" 'image-dired-jump-thumbnail-buffer)
+ (define-key map "\C-ti" 'image-dired-dired-display-image)
+ (define-key map "\C-tx" 'image-dired-dired-display-external)
+ (define-key map "\C-ta" 'image-dired-display-thumbs-append)
+ (define-key map "\C-t." 'image-dired-display-thumb)
+ (define-key map "\C-tc" 'image-dired-dired-comment-files)
+ (define-key map "\C-tf" 'image-dired-mark-tagged-files)
+ (define-key map "\C-t\C-t" 'image-dired-dired-insert-marked-thumbs)
+ (define-key map "\C-te" 'image-dired-dired-edit-comment-and-tags)
;; Make menu bar items.
(cons "Immediate" (make-sparse-keymap "Immediate")))
(define-key map
- [menu-bar immediate tumme-dired-display-external]
- '(menu-item "Display Image Externally" tumme-dired-display-external
+ [menu-bar immediate image-dired-dired-display-external]
+ '(menu-item "Display Image Externally" image-dired-dired-display-external
:help "Display image in external viewer"))
(define-key map
- [menu-bar immediate tumme-dired-display-image]
- '(menu-item "Display Image" tumme-dired-display-image
+ [menu-bar immediate image-dired-dired-display-image]
+ '(menu-item "Display Image" image-dired-dired-display-image
:help "Display sized image in a separate window"))
(define-key map [menu-bar immediate dashes-4]
(cons "Regexp" (make-sparse-keymap "Regexp")))
(define-key map
- [menu-bar regexp tumme-mark-tagged-files]
- '(menu-item "Mark From Image Tag..." tumme-mark-tagged-files
- :help "Mark files whose image tags matches regexp"))
-
+ [menu-bar regexp image-dired-mark-tagged-files]
+ '(menu-item "Mark From Image Tag..." image-dired-mark-tagged-files
+ :help "Mark files whose image tags matches regexp"))
+
(define-key map [menu-bar regexp dashes-1]
- '("--"))
+ '("--"))
(define-key map [menu-bar regexp downcase]
'(menu-item "Downcase" dired-downcase
(define-key map [menu-bar operate]
(cons "Operate" (make-sparse-keymap "Operate")))
-
- (define-key map [menu-bar operate dashes-2]
- '("--"))
-
(define-key map
- [menu-bar operate tumme-delete-tag]
- '(menu-item "Delete Image Tag..." tumme-delete-tag
+ [menu-bar operate image-dired-delete-tag]
+ '(menu-item "Delete Image Tag..." image-dired-delete-tag
:help "Delete image tag from current or marked files"))
(define-key map
- [menu-bar operate tumme-tag-files]
- '(menu-item "Add Image Tags..." tumme-tag-files
+ [menu-bar operate image-dired-tag-files]
+ '(menu-item "Add Image Tags..." image-dired-tag-files
:help "Add image tags to current or marked files"))
(define-key map
- [menu-bar operate tumme-dired-comment-files]
- '(menu-item "Add Image Comment..." tumme-dired-comment-files
+ [menu-bar operate image-dired-dired-comment-files]
+ '(menu-item "Add Image Comment..." image-dired-dired-comment-files
:help "Add image comment to current or marked files"))
(define-key map
- [menu-bar operate tumme-display-thumbs]
- '(menu-item "Display Thumbnails" tumme-display-thumbs
- :help "Display thumbnails for current or marked image files"))
-
+ [menu-bar operate image-dired-display-thumbs]
+ '(menu-item "Display Image-Dired" image-dired-display-thumbs
+ :help "Display image-dired for current or marked image files"))
+
(define-key map [menu-bar operate dashes-3]
- '("--"))
+ '("--"))
(define-key map [menu-bar operate query-replace]
'(menu-item "Query Replace in Files..." dired-do-query-replace-regexp
\f
;; Deleting files
-(defcustom dired-recursive-deletes nil ; Default only delete empty directories.
+(defcustom dired-recursive-deletes 'top
"*Decide whether recursive deletes are allowed.
-nil means no recursive deletes.
+A value of nil means no recursive deletes.
`always' means delete recursively without asking. This is DANGEROUS!
`top' means ask for each directory at top level, but delete its subdirectories
without asking.
(defun dired-do-flagged-delete (&optional nomessage)
"In Dired, delete the files flagged for deletion.
If NOMESSAGE is non-nil, we don't display any message
-if there are no flagged files."
+if there are no flagged files.
+`dired-recursive-deletes' controls whether
+deletion of non-empty directories is allowed."
(interactive)
(let* ((dired-marker-char dired-del-marker)
(regexp (dired-marker-regexp))
(message "(No deletions requested)")))))
(defun dired-do-delete (&optional arg)
- "Delete all marked (or next ARG) files."
+ "Delete all marked (or next ARG) files.
+`dired-recursive-deletes' controls whether
+deletion of non-empty directories is allowed."
;; This is more consistent with the file marking feature than
;; dired-do-flagged-delete.
(interactive "P")
;; Modeline display of "by name" or "by date" guarantees the user a
;; match with the corresponding regexps. Non-matching switches are
;; shown literally.
- (setq mode-name
- (let (case-fold-search)
- (cond ((string-match dired-sort-by-name-regexp dired-actual-switches)
- "Dired by name")
- ((string-match dired-sort-by-date-regexp dired-actual-switches)
- "Dired by date")
- (t
- (concat "Dired " dired-actual-switches)))))
- (force-mode-line-update))
+ (when (eq major-mode 'dired-mode)
+ (setq mode-name
+ (let (case-fold-search)
+ (cond ((string-match
+ dired-sort-by-name-regexp dired-actual-switches)
+ "Dired by name")
+ ((string-match
+ dired-sort-by-date-regexp dired-actual-switches)
+ "Dired by date")
+ (t
+ (concat "Dired " dired-actual-switches)))))
+ (force-mode-line-update)))
(defun dired-sort-toggle-or-edit (&optional arg)
"Toggle between sort by date/name and refresh the dired buffer.
With optional second arg NO-REVERT, don't refresh the listing afterwards."
(dired-sort-R-check switches)
(setq dired-actual-switches switches)
- (if (eq major-mode 'dired-mode) (dired-sort-set-modeline))
+ (dired-sort-set-modeline)
(or no-revert (revert-buffer)))
(defvar dired-subdir-alist-pre-R nil
;;;; Drag and drop support
-(defcustom dired-recursive-copies nil
+(defcustom dired-recursive-copies 'top
"*Decide whether recursive copies are allowed.
-nil means no recursive copies.
+A value of nil means no recursive copies.
`always' means copy recursively without asking.
`top' means ask for each directory at top level.
Anything else means ask for each directory."