;;; 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)
("^file:" . dired-dnd-handle-local-file))
"The functions to call when a drop in `dired-mode' is made.
See `dnd-protocol-alist' for more information. When nil, behave
-as in other buffers. Changing this options is effective only for
+as in other buffers. Changing this option is effective only for
new dired buffers."
:type '(choice (repeat (cons (regexp) (function)))
(const :tag "Behave as in other buffers" nil))
(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))
;; 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 "f" 'dired-find-file)
(define-key map "\C-m" 'dired-advertised-find-file)
(define-key map "g" 'revert-buffer)
- (define-key map "\M-g" 'dired-goto-file)
(define-key map "h" 'describe-mode)
(define-key map "i" 'dired-maybe-insert-subdir)
+ (define-key map "j" 'dired-goto-file)
(define-key map "k" 'dired-do-kill-lines)
(define-key map "l" 'dired-do-redisplay)
(define-key map "m" 'dired-mark)
;; 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-tag-remove)
+ (define-key map "\C-tr" 'tumme-delete-tag)
(define-key map "\C-tj" 'tumme-jump-thumbnail-buffer)
- (define-key map "\C-ti" 'tumme-display-dired-image)
+ (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)
;; Make menu bar items.
(define-key map [menu-bar immediate]
(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
+ :help "Display image in external viewer"))
+ (define-key map
+ [menu-bar immediate tumme-dired-display-image]
+ '(menu-item "Display Image" tumme-dired-display-image
+ :help "Display sized image in a separate window"))
+
+ (define-key map [menu-bar immediate dashes-4]
+ '("--"))
+
(define-key map [menu-bar immediate revert-buffer]
'(menu-item "Refresh" revert-buffer
:help "Update contents of shown directories"))
'("--"))
(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
(define-key map [menu-bar regexp]
(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"))
+
+ (define-key map [menu-bar regexp dashes-1]
+ '("--"))
+
(define-key map [menu-bar regexp downcase]
'(menu-item "Downcase" dired-downcase
;; When running on plain MS-DOS, there's only one
(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
+ :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
+ :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
+ :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"))
+
+ (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
:help "Replace regexp in marked files"))
(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.
(forward-line 1))))
(defun dired-goto-file (file)
- "Go to file line of FILE in this dired buffer."
+ "Go to line describing file FILE in this dired buffer."
;; Return value of point on success, else nil.
;; FILE must be an absolute file name.
;; Loses if FILE contains control chars like "\007" for which ls
(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
;; 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