]> code.delx.au - gnu-emacs/blobdiff - lisp/dired.el
Merge from emacs--devo--0
[gnu-emacs] / lisp / dired.el
index f495cf18cb3fd5cb84629f5fc4ff5cb204b6ecf2..7734a9bd69fb568aa9dbe02cae00512661ec9121 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
@@ -1260,6 +1263,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
     (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)
 
     ;; Make menu bar items.
 
@@ -1325,7 +1329,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
       '("--"))
 
     (define-key map [menu-bar immediate compare-directories]
-      '(menu-item "Compare directories..." dired-compare-directories
+      '(menu-item "Compare Directories..." dired-compare-directories
                  :help "Mark files with different attributes in two dired buffers"))
     (define-key map [menu-bar immediate backup-diff]
       '(menu-item "Compare with Backup" dired-backup-diff
@@ -2203,40 +2207,40 @@ instead of `dired-actual-switches'."
                 (concat "\\`" (match-string 1 default-directory)))))
       (goto-char (point-min))
       (setq dired-subdir-alist nil)
-      (while (and (re-search-forward dired-subdir-regexp nil t)
-                 ;; Avoid taking a file name ending in a colon
-                 ;; as a subdir name.
-                 (not (save-excursion
-                        (goto-char (match-beginning 0))
-                        (beginning-of-line)
-                        (forward-char 2)
-                        (save-match-data (looking-at dired-re-perms)))))
-       (save-excursion
-         (goto-char (match-beginning 1))
-         (setq new-dir-name
-               (buffer-substring-no-properties (point) (match-end 1))
-               new-dir-name
-               (save-match-data
-                 (if (and R-ftp-base-dir-regex
-                          (not (string= new-dir-name default-directory))
-                          (string-match R-ftp-base-dir-regex new-dir-name))
-                     (concat default-directory
-                             (substring new-dir-name (match-end 0)))
-                   (expand-file-name new-dir-name))))
-         (delete-region (point) (match-end 1))
-         (insert new-dir-name))
-       (setq count (1+ count))
-       (dired-alist-add-1 new-dir-name
-                          ;; Place a sub directory boundary between lines.
-                          (save-excursion
-                            (goto-char (match-beginning 0))
-                            (beginning-of-line)
-                            (point-marker))))
+      (while (re-search-forward dired-subdir-regexp nil t)
+       ;; Avoid taking a file name ending in a colon
+       ;; as a subdir name.
+       (unless (save-excursion
+                 (goto-char (match-beginning 0))
+                 (beginning-of-line)
+                 (forward-char 2)
+                 (save-match-data (looking-at dired-re-perms)))
+         (save-excursion
+           (goto-char (match-beginning 1))
+           (setq new-dir-name
+                 (buffer-substring-no-properties (point) (match-end 1))
+                 new-dir-name
+                 (save-match-data
+                   (if (and R-ftp-base-dir-regex
+                            (not (string= new-dir-name default-directory))
+                            (string-match R-ftp-base-dir-regex new-dir-name))
+                       (concat default-directory
+                               (substring new-dir-name (match-end 0)))
+                     (expand-file-name new-dir-name))))
+           (delete-region (point) (match-end 1))
+           (insert new-dir-name))
+         (setq count (1+ count))
+         (dired-alist-add-1 new-dir-name
+                            ;; Place a sub directory boundary between lines.
+                            (save-excursion
+                              (goto-char (match-beginning 0))
+                              (beginning-of-line)
+                              (point-marker)))))
       (if (and (> count 1) (interactive-p))
-         (message "Buffer includes %d directories" count))
-      ;; We don't need to sort it because it is in buffer order per
-      ;; constructionem.  Return new alist:
-      dired-subdir-alist)))
+         (message "Buffer includes %d directories" count)))
+    ;; We don't need to sort it because it is in buffer order per
+    ;; constructionem.  Return new alist:
+    dired-subdir-alist))
 
 (defun dired-alist-add-1 (dir new-marker)
   ;; Add new DIR at NEW-MARKER.  Don't sort.
@@ -3042,6 +3046,10 @@ Thus, use \\[backward-page] to find the beginning of a group of errors."
               (insert "\f\n")))))))
 
 (defun dired-log-summary (string failures)
+  "State a summary of a command's failures, in echo area and log buffer.
+STRING is an overall summary of the failures.
+FAILURES is a list of file names that we failed to operate on,
+or nil if file names are not applicable."
   (if (= (length failures) 1)
       (message "%s"
               (with-current-buffer dired-log-buffer
@@ -3090,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.
@@ -3154,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