(dired-recursive-deletes, dired-recursive-copies): Change default to
[bpt/emacs.git] / lisp / dired.el
index 491ef26..ba488fc 100644 (file)
@@ -1,7 +1,7 @@
 ;;; 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
@@ -56,7 +56,7 @@ may contain even `F', `b', `i' and `s'.  See also the variable
 `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)
 
@@ -791,6 +791,9 @@ wildcards, erases the buffer, and builds the subdir-alist anew
       (run-hooks 'dired-before-readin-hook)
       (if (consp buffer-undo-list)
          (setq buffer-undo-list nil))
+      (make-local-variable 'file-name-coding-system)
+      (setq file-name-coding-system
+           (or coding-system-for-read file-name-coding-system))
       (let (buffer-read-only
            ;; Don't make undo entries for readin.
            (buffer-undo-list t))
@@ -1042,9 +1045,9 @@ Preserves old cursor, marks/flags, hidden-p."
     ;; 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
@@ -1248,19 +1251,19 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
     (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.
 
@@ -1307,12 +1310,12 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
       (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]
@@ -1355,12 +1358,12 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
       (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
@@ -1448,29 +1451,25 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
 
     (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
@@ -2359,9 +2358,9 @@ Optional argument means return a file name relative to `default-directory'."
 \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.
@@ -2407,7 +2406,9 @@ Anything else, ask for each sub-directory."
 (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))
@@ -2423,7 +2424,9 @@ if there are no flagged files."
          (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")
@@ -3095,15 +3098,18 @@ The idea is to set this buffer-locally in special dired buffers.")
   ;; 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.
@@ -3159,7 +3165,7 @@ set the minor mode accordingly, others appear literally in the mode line.
 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
@@ -3200,9 +3206,9 @@ To be called first in body of `dired-sort-other', etc."
 
 ;;;;  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."