• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/

Lines Matching +defs:dired +defs:do +defs:rename

0 ;;; dired.el --- directory-browsing commands
40 (defgroup dired nil
45 (defgroup dired-mark nil
47 :prefix "dired-"
48 :group 'dired)
52 (defcustom dired-listing-switches "-al"
56 `dired-ls-F-marks-symlinks' concerning the `F' switch.
61 :group 'dired)
63 (defvar dired-subdir-switches nil
65 If nil, `dired-listing-switches' is used.")
72 (defvar dired-chown-program
80 (defvar dired-use-ls-dired (not (not (string-match "gnu" system-configuration)))
81 "Non-nil means Dired should use `ls --dired'.")
83 (defvar dired-chmod-program "chmod"
86 (defvar dired-touch-program "touch"
90 (defcustom dired-ls-F-marks-symlinks nil
104 :group 'dired-mark)
107 (defcustom dired-trivial-filenames "^\\.\\.?$\\|^#"
114 :group 'dired)
117 (defcustom dired-keep-marker-rename t
125 :group 'dired-mark)
128 (defcustom dired-keep-marker-copy ?C
134 :group 'dired-mark)
137 (defcustom dired-keep-marker-hardlink ?H
143 :group 'dired-mark)
146 (defcustom dired-keep-marker-symlink ?Y
152 :group 'dired-mark)
155 (defcustom dired-dwim-target nil
157 This means: if there is a dired buffer displayed in the next window,
158 use its current subdir, instead of the current subdir of this dired buffer.
160 The target is used in the prompt for file copy, rename etc."
162 :group 'dired)
165 (defcustom dired-copy-preserve-time t
169 :group 'dired)
173 (defvaralias 'dired-free-space-program 'directory-free-space-program)
174 (defvaralias 'dired-free-space-args 'directory-free-space-args)
178 (defcustom dired-load-hook nil
181 :group 'dired
184 (defcustom dired-mode-hook nil
185 "Run at the very end of `dired-mode'."
186 :group 'dired
189 (defcustom dired-before-readin-hook nil
190 "This hook is run before a dired buffer is read in (created or reverted)."
191 :group 'dired
194 (defcustom dired-after-readin-hook nil
198 :group 'dired
200 ;; Note this can't simply be run inside function `dired-ls' as the hook
201 ;; functions probably depend on the dired-subdir-alist to be OK.
203 (defcustom dired-dnd-protocol-alist
204 '(("^file:///" . dired-dnd-handle-local-file)
205 ("^file://" . dired-dnd-handle-file)
206 ("^file:" . dired-dnd-handle-local-file))
207 "The functions to call when a drop in `dired-mode' is made.
210 new dired buffers."
214 :group 'dired)
218 (defvar dired-marker-char ?* ; the answer is 42
220 ;; (let ((dired-marker-char ?X))
228 This is what the do-commands look for, and what the mark-commands store.")
230 (defvar dired-del-marker ?D
233 (defvar dired-shrink-to-fit t
238 (defvar dired-flagging-regexp nil);; Last regexp used to flag files.
240 (defvar dired-file-version-alist)
243 (defvar dired-directory nil
244 "The directory name or wildcard spec that this dired directory lists.
245 Local to each dired buffer. May be a list, in which case the car is the
249 (defvar dired-actual-switches nil
250 "The value of `dired-listing-switches' used to make this buffer's text.")
252 (defvar dired-re-inode-size "[0-9 \t]*"
259 (defvar dired-re-mark "^[^ \n]")
262 (defvar dired-re-maybe-mark "^. ")
265 (defvar dired-re-dir (concat dired-re-maybe-mark dired-re-inode-size "d[^:]"))
266 (defvar dired-re-sym (concat dired-re-maybe-mark dired-re-inode-size "l[^:]"))
267 (defvar dired-re-exe;; match ls permission string of an executable file
270 (concat dired-re-maybe-mark dired-re-inode-size x)))
275 (defvar dired-re-perms "[-bcdlps][-r][-w].[-r][-w].[-r][-w].")
276 (defvar dired-re-dot "^.* \\.\\.?/?$")
279 (defvar dired-subdir-alist nil
285 (defvar dired-switches-alist nil
288 (make-variable-buffer-local 'dired-switches-alist)
290 (defvaralias 'dired-move-to-filename-regexp
293 (defvar dired-subdir-regexp "^. \\([^\n\r]+\\)\\(:\\)[\n\r]"
300 (defgroup dired-faces nil
302 :group 'dired
305 (defface dired-header
308 :group 'dired-faces
310 (defvar dired-header-face 'dired-header
313 (defface dired-mark
315 "Face used for dired marks."
316 :group 'dired-faces
318 (defvar dired-mark-face 'dired-mark
319 "Face name used for dired marks.")
321 (defface dired-marked
324 :group 'dired-faces
326 (defvar dired-marked-face 'dired-marked
329 (defface dired-flagged
332 :group 'dired-faces
334 (defvar dired-flagged-face 'dired-flagged
337 (defface dired-warning
340 :group 'dired-faces
342 (defvar dired-warning-face 'dired-warning
345 (defface dired-directory
348 :group 'dired-faces
350 (defvar dired-directory-face 'dired-directory
353 (defface dired-symlink
356 :group 'dired-faces
358 (defvar dired-symlink-face 'dired-symlink
361 (defface dired-ignored
364 :group 'dired-faces
366 (defvar dired-ignored-face 'dired-ignored
369 (defvar dired-font-lock-keywords
373 (list dired-subdir-regexp '(1 dired-header-face))
376 (list dired-re-mark '(0 dired-mark-face))
380 ;; Dired defined function `dired-move-to-filename' before searching for the
384 (list (concat "^[" (char-to-string dired-marker-char) "]")
385 '(".+" (dired-move-to-filename) nil (0 dired-marked-face)))
388 (list (concat "^[" (char-to-string dired-del-marker) "]")
389 '(".+" (dired-move-to-filename) nil (0 dired-flagged-face)))
396 ;;; (list (concat dired-re-maybe-mark dired-re-inode-size
398 ;;; '(1 dired-warning-face)
399 ;;; '(".+" (dired-move-to-filename) nil (0 dired-warning-face)))
404 (list (concat dired-re-maybe-mark dired-re-inode-size
406 '(1 dired-warning-face))
407 (list (concat dired-re-maybe-mark dired-re-inode-size
409 '(1 dired-warning-face))
412 (list dired-re-dir
413 '(".+" (dired-move-to-filename) nil (0 dired-directory-face)))
416 (list dired-re-sym
417 '(".+" (dired-move-to-filename) nil (0 dired-symlink-face)))
422 ;; start of that file name. So we do this complex MATCH-ANCHORED form.
424 '(".+" (dired-move-to-filename) nil (0 dired-ignored-face))))
439 (dired-move-to-filename)))
440 nil (0 dired-ignored-face))))
449 (defmacro dired-mark-if (predicate msg)
464 (insert dired-marker-char)
470 (dired-plural-s count)
471 (if (eq dired-marker-char ?\040) "un" "")
472 (if (eq dired-marker-char dired-del-marker)
476 (defmacro dired-map-over-marks (body arg &optional show-progress
486 redisplay the dired buffer after each file is processed.
505 (dired-repeat-over-lines
515 (let ((regexp (dired-marker-regexp)) next-position)
541 (dired-move-to-filename)))
543 (defun dired-get-marked-files (&optional localp arg filter distinguish-one-marked)
548 Optional arg LOCALP as in `dired-get-filename'.
561 (dired-map-over-marks
562 (dired-get-filename localp)
575 ;; The dired command
577 (defun dired-read-dir-and-switches (str)
582 dired-listing-switches))
592 ;;;###autoload (define-key ctl-x-map "d" 'dired)
594 (defun dired (dirname &optional switches)
595 "\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.
602 \\<dired-mode-map>\
604 You can flag files for deletion with \\[dired-flag-file-deletion] and then
605 delete them by typing \\[dired-do-flagged-delete].
608 If DIRNAME is already in a dired buffer, that buffer is used without refresh."
610 (interactive (dired-read-dir-and-switches ""))
611 (switch-to-buffer (dired-noselect dirname switches)))
613 ;;;###autoload (define-key ctl-x-4-map "d" 'dired-other-window)
615 (defun dired-other-window (dirname &optional switches)
616 "\"Edit\" directory DIRNAME. Like `dired' but selects in another window."
617 (interactive (dired-read-dir-and-switches "in other window "))
618 (switch-to-buffer-other-window (dired-noselect dirname switches)))
620 ;;;###autoload (define-key ctl-x-5-map "d" 'dired-other-frame)
622 (defun dired-other-frame (dirname &optional switches)
623 "\"Edit\" directory DIRNAME. Like `dired' but makes a new frame."
624 (interactive (dired-read-dir-and-switches "in other frame "))
625 (switch-to-buffer-other-frame (dired-noselect dirname switches)))
628 (defun dired-noselect (dir-or-list &optional switches)
629 "Like `dired' but returns the dired buffer as value, does not select it."
654 (dired-internal-noselect dir-or-list switches)))
656 ;; The following is an internal dired function. It returns non-nil if
657 ;; the directory visited by the current dired buffer has changed on
659 (defun dired-directory-changed-p (dirname)
666 (defun dired-buffer-stale-p (&optional noconfirm)
667 "Return non-nil if current dired buffer needs updating.
671 (if (consp dired-directory) (car dired-directory) dired-directory)))
675 (dired-directory-changed-p dirname))))
677 ;; Separate function from dired-noselect for the sake of dired-vms.el.
678 (defun dired-internal-noselect (dir-or-list &optional switches mode)
679 ;; If there is an existing dired buffer for DIRNAME, just leave
680 ;; buffer as it is (don't even call dired-revert).
684 ;; buffer's old value, so call dired-sort-other, which does
686 ;; A pity we can't possibly do "Directory has changed - refresh? "
688 ;; Optional argument MODE is passed to dired-find-buffer-nocreate,
692 ;; note that buffer already is in dired-mode, if found
699 (setq buffer (dired-find-buffer-nocreate dirname mode)
704 ;; or whatever, now that dired-mode does not
711 (setq dired-directory dir-or-list)
712 ;; this calls dired-revert
713 (dired-sort-other switches))
715 ((when (dired-directory-changed-p dirname)
721 ;; We can do this unconditionally
722 ;; because dired-noselect ensures that the name
726 (or switches (setq switches dired-listing-switches))
728 (dired-mode dir-or-list switches))
729 ;; default-directory and dired-actual-switches are set now
730 ;; (buffer-local), so we can call dired-readin:
733 (progn (dired-readin)
735 ;; dired-readin can fail if parent directories are inaccessible.
739 (dired-initial-position dirname))
743 (defvar dired-buffers nil
744 ;; Enlarged by dired-advertise
745 ;; Queried by function dired-buffers-for-dir. When this detects a
747 "Alist of expanded directories and their associated dired buffers.")
749 (defun dired-find-buffer-nocreate (dirname &optional mode)
750 ;; This differs from dired-buffers-for-dir in that it does not consider
754 (let (found (blist dired-buffers)) ; was (buffer-list)
755 (or mode (setq mode 'dired-mode))
762 dired-directory ;; nil during find-alternate-file
765 (if (consp dired-directory)
766 (car dired-directory)
767 dired-directory))))
775 ;; Read in a new dired buffer
777 (defun dired-readin ()
778 "Read in a new dired buffer.
779 Differs from `dired-insert-subdir' in that it accepts
783 ;; default-directory and dired-actual-switches must be buffer-local
786 (if (consp dired-directory)
787 (setq dirname (car dired-directory))
788 (setq dirname dired-directory))
791 ;; This hook which may want to modify dired-actual-switches
792 ;; based on dired-directory, e.g. with ange-ftp to a SysV host
794 (run-hooks 'dired-before-readin-hook)
805 (dired-readin-insert))
808 ;; dired-build-subdir-alist will call dired-clear-alist first
809 (set (make-local-variable 'dired-subdir-alist) nil)
810 (dired-build-subdir-alist)
816 ;; dired-readin's output, nothing else. The hook can
817 ;; successfully use dired functions (e.g. dired-get-filename)
818 ;; as the subdir-alist has been built in dired-readin.
819 (run-hooks 'dired-after-readin-hook))))
821 ;; Subroutines of dired-readin
823 (defun dired-readin-insert ()
825 ;; already in dired-directory, assuming a clean buffer.
827 (if (consp dired-directory)
828 (setq dir (car dired-directory)
829 file-list (cdr dired-directory))
830 (setq dir dired-directory
836 (dired-insert-directory dir dired-actual-switches nil nil t)
842 (dired-insert-directory dir dired-actual-switches
845 (defun dired-align-file (beg end)
851 ;; just big enough for that one output. Thus when dired refreshes one
858 ;; `dired-move-to-filename'. To this end, we limit ourselves to
872 (dired-move-to-filename nil end)))
877 (dired-move-to-filename))
880 (dired-move-to-filename))))
883 ;; Make sure there is some work left to do.
890 (dired-move-to-filename))
944 (eq (dired-move-to-filename) (marker-position file)))
952 (defun dired-insert-directory (dir switches &optional file-list wildcard hdr)
963 (if (or dired-use-ls-dired (file-remote-p dir))
964 (setq switches (concat "--dired " switches)))
973 (dired-align-file beg (point))))
976 (if (not (string-match "b" dired-actual-switches))
992 (dired-insert-set-properties opoint (point))
993 ;; If we used --dired and it worked, the lines are already indented.
1004 ;; Note that dired-build-subdir-alist will replace the name
1012 (defun dired-insert-set-properties (beg end)
1018 (if (dired-move-to-filename)
1022 (dired-move-to-end-of-filename)
1030 ;; Reverting a dired buffer
1032 (defun dired-revert (&optional arg noconfirm)
1033 "Reread the dired buffer.
1034 Must also be called after `dired-actual-switches' have changed.
1040 (ofile (dired-get-filename nil t))
1042 (hidden-subdirs (dired-remember-hidden))
1043 (old-subdir-alist (cdr (reverse dired-subdir-alist))) ; except pwd
1047 (setq mark-alist;; only after dired-remember-hidden since this unhides:
1048 (dired-remember-marks (point-min) (point-max)))
1050 (dired-uncache
1051 (if (consp dired-directory) (car dired-directory) dired-directory))
1052 ;; Run dired-after-readin-hook just once, below.
1053 (let ((dired-after-readin-hook nil))
1054 (dired-readin)
1055 (dired-insert-old-subdirs old-subdir-alist))
1056 (dired-mark-remembered mark-alist) ; mark files that were marked
1058 ;; have been reinserted (else omitting in dired-x would omit marked files)
1059 (run-hooks 'dired-after-readin-hook) ; no need to narrow
1060 (or (and ofile (dired-goto-file ofile)) ; move cursor to where it
1062 (dired-move-to-filename)
1065 (if (dired-goto-subdir dir)
1066 (dired-hide-subdir 1))))
1073 ;; Subroutines of dired-revert
1076 (defun dired-remember-marks (beg end)
1084 (while (re-search-forward dired-re-mark end t)
1085 (if (setq fil (dired-get-filename nil t))
1090 (defun dired-mark-remembered (alist)
1099 (if (dired-goto-file fil)
1105 (defun dired-remember-hidden ()
1107 (let ((l dired-subdir-alist) dir pos result)
1118 (defun dired-insert-old-subdirs (old-subdir-alist)
1121 (or (string-match "R" dired-actual-switches)
1129 (dired-uncache dir)
1130 (dired-insert-subdir dir))
1133 (defun dired-uncache (dir)
1135 (let ((handler (find-file-name-handler dir 'dired-uncache)))
1137 (funcall handler 'dired-uncache dir))))
1140 ;; dired mode key bindings and initialization
1142 (defvar dired-mode-map
1144 ;; (define-key dired-mode-map "\C-d" 'dired-flag-file-deletion)
1147 (define-key map [mouse-2] 'dired-mouse-find-file-other-window)
1150 (define-key map "#" 'dired-flag-auto-save-files)
1151 (define-key map "." 'dired-clean-directory)
1152 (define-key map "~" 'dired-flag-backup-files)
1153 (define-key map "&" 'dired-flag-garbage-files)
1155 (define-key map "A" 'dired-do-search)
1156 (define-key map "C" 'dired-do-copy)
1157 (define-key map "B" 'dired-do-byte-compile)
1158 (define-key map "D" 'dired-do-delete)
1159 (define-key map "G" 'dired-do-chgrp)
1160 (define-key map "H" 'dired-do-hardlink)
1161 (define-key map "L" 'dired-do-load)
1162 (define-key map "M" 'dired-do-chmod)
1163 (define-key map "O" 'dired-do-chown)
1164 (define-key map "P" 'dired-do-print)
1165 (define-key map "Q" 'dired-do-query-replace-regexp)
1166 (define-key map "R" 'dired-do-rename)
1167 (define-key map "S" 'dired-do-symlink)
1168 (define-key map "T" 'dired-do-touch)
1169 (define-key map "X" 'dired-do-shell-command)
1170 (define-key map "Z" 'dired-do-compress)
1171 (define-key map "!" 'dired-do-shell-command)
1173 (define-key map "=" 'dired-diff)
1174 (define-key map "\M-=" 'dired-backup-diff)
1176 (define-key map "\M-\C-?" 'dired-unmark-all-files)
1177 (define-key map "\M-\C-d" 'dired-tree-down)
1178 (define-key map "\M-\C-u" 'dired-tree-up)
1179 (define-key map "\M-\C-n" 'dired-next-subdir)
1180 (define-key map "\M-\C-p" 'dired-prev-subdir)
1182 (define-key map "\M-{" 'dired-prev-marked-file)
1183 (define-key map "\M-}" 'dired-next-marked-file)
1185 ;; We used to get to the submap via a symbol dired-regexp-prefix,
1189 (define-key map "%u" 'dired-upcase)
1190 (define-key map "%l" 'dired-downcase)
1191 (define-key map "%d" 'dired-flag-files-regexp)
1192 (define-key map "%g" 'dired-mark-files-containing-regexp)
1193 (define-key map "%m" 'dired-mark-files-regexp)
1194 (define-key map "%r" 'dired-do-rename-regexp)
1195 (define-key map "%C" 'dired-do-copy-regexp)
1196 (define-key map "%H" 'dired-do-hardlink-regexp)
1197 (define-key map "%R" 'dired-do-rename-regexp)
1198 (define-key map "%S" 'dired-do-symlink-regexp)
1201 (define-key map "**" 'dired-mark-executables)
1202 (define-key map "*/" 'dired-mark-directories)
1203 (define-key map "*@" 'dired-mark-symlinks)
1204 (define-key map "*%" 'dired-mark-files-regexp)
1205 (define-key map "*c" 'dired-change-marks)
1206 (define-key map "*s" 'dired-mark-subdir-files)
1207 (define-key map "*m" 'dired-mark)
1208 (define-key map "*u" 'dired-unmark)
1209 (define-key map "*?" 'dired-unmark-all-files)
1210 (define-key map "*!" 'dired-unmark-all-marks)
1211 (define-key map "U" 'dired-unmark-all-marks)
1212 (define-key map "*\177" 'dired-unmark-backward)
1213 (define-key map "*\C-n" 'dired-next-marked-file)
1214 (define-key map "*\C-p" 'dired-prev-marked-file)
1215 (define-key map "*t" 'dired-toggle-marks)
1217 (define-key map "a" 'dired-find-alternate-file)
1218 (define-key map "d" 'dired-flag-file-deletion)
1219 (define-key map "e" 'dired-find-file)
1220 (define-key map "f" 'dired-find-file)
1221 (define-key map "\C-m" 'dired-advertised-find-file)
1224 (define-key map "i" 'dired-maybe-insert-subdir)
1225 (define-key map "j" 'dired-goto-file)
1226 (define-key map "k" 'dired-do-kill-lines)
1227 (define-key map "l" 'dired-do-redisplay)
1228 (define-key map "m" 'dired-mark)
1229 (define-key map "n" 'dired-next-line)
1230 (define-key map "o" 'dired-find-file-other-window)
1231 (define-key map "\C-o" 'dired-display-file)
1232 (define-key map "p" 'dired-previous-line)
1234 (define-key map "s" 'dired-sort-toggle-or-edit)
1235 (define-key map "t" 'dired-toggle-marks)
1236 (define-key map "u" 'dired-unmark)
1237 (define-key map "v" 'dired-view-file)
1238 (define-key map "w" 'dired-copy-filename-as-kill)
1239 (define-key map "x" 'dired-do-flagged-delete)
1240 (define-key map "y" 'dired-show-file-type)
1241 (define-key map "+" 'dired-create-directory)
1243 (define-key map "<" 'dired-prev-dirline)
1244 (define-key map ">" 'dired-next-dirline)
1245 (define-key map "^" 'dired-up-directory)
1246 (define-key map " " 'dired-next-line)
1247 (define-key map "\C-n" 'dired-next-line)
1248 (define-key map "\C-p" 'dired-previous-line)
1249 (define-key map [down] 'dired-next-line)
1250 (define-key map [up] 'dired-previous-line)
1252 (define-key map "$" 'dired-hide-subdir)
1253 (define-key map "\M-$" 'dired-hide-all)
1255 (define-key map "?" 'dired-summary)
1256 (define-key map "\177" 'dired-unmark-backward)
1257 (define-key map [remap undo] 'dired-undo)
1258 (define-key map [remap advertised-undo] 'dired-undo)
1259 ;; thumbnail manipulation (image-dired)
1260 (define-key map "\C-td" 'image-dired-display-thumbs)
1261 (define-key map "\C-tt" 'image-dired-tag-files)
1262 (define-key map "\C-tr" 'image-dired-delete-tag)
1263 (define-key map "\C-tj" 'image-dired-jump-thumbnail-buffer)
1264 (define-key map "\C-ti" 'image-dired-dired-display-image)
1265 (define-key map "\C-tx" 'image-dired-dired-display-external)
1266 (define-key map "\C-ta" 'image-dired-display-thumbs-append)
1267 (define-key map "\C-t." 'image-dired-display-thumb)
1268 (define-key map "\C-tc" 'image-dired-dired-comment-files)
1269 (define-key map "\C-tf" 'image-dired-mark-tagged-files)
1270 (define-key map "\C-t\C-t" 'image-dired-dired-insert-marked-thumbs)
1271 (define-key map "\C-te" 'image-dired-dired-edit-comment-and-tags)
1284 '(menu-item "Hide All" dired-hide-all
1287 '(menu-item "Hide/UnHide Subdir" dired-hide-subdir
1290 '(menu-item "Tree Down" dired-tree-down
1293 '(menu-item "Tree Up" dired-tree-up
1296 '(menu-item "Up Directory" dired-up-directory
1299 '(menu-item "Prev Subdir" dired-prev-subdir
1302 '(menu-item "Next Subdir" dired-next-subdir
1305 '(menu-item "Prev Dirline" dired-prev-dirline
1308 '(menu-item "Next Dirline" dired-next-dirline
1311 '(menu-item "Insert This Subdir" dired-maybe-insert-subdir
1318 [menu-bar immediate image-dired-dired-display-external]
1319 '(menu-item "Display Image Externally" image-dired-dired-display-external
1322 [menu-bar immediate image-dired-dired-display-image]
1323 '(menu-item "Display Image" image-dired-dired-display-image
1337 '(menu-item "Compare Directories..." dired-compare-directories
1338 :help "Mark files with different attributes in two dired buffers"))
1340 '(menu-item "Compare with Backup" dired-backup-diff
1343 '(menu-item "Diff..." dired-diff
1346 '(menu-item "View This File" dired-view-file
1349 '(menu-item "Display in Other Window" dired-display-file
1352 '(menu-item "Find in Other Window" dired-find-file-other-window
1355 '(menu-item "Find This File" dired-find-file
1358 '(menu-item "Create Directory..." dired-create-directory))
1366 [menu-bar regexp image-dired-mark-tagged-files]
1367 '(menu-item "Mark From Image Tag..." image-dired-mark-tagged-files
1374 '(menu-item "Downcase" dired-downcase
1381 '(menu-item "Upcase" dired-upcase
1386 '(menu-item "Hardlink..." dired-do-hardlink-regexp
1389 '(menu-item "Symlink..." dired-do-symlink-regexp
1392 (define-key map [menu-bar regexp rename]
1393 '(menu-item "Rename..." dired-do-rename-regexp
1396 '(menu-item "Copy..." dired-do-copy-regexp
1399 '(menu-item "Flag..." dired-flag-files-regexp
1402 '(menu-item "Mark..." dired-mark-files-regexp
1405 '(menu-item "Mark Containing..." dired-mark-files-containing-regexp
1412 '(menu-item "Previous Marked" dired-prev-marked-file
1415 '(menu-item "Next Marked" dired-next-marked-file
1418 '(menu-item "Change Marks..." dired-change-marks
1421 '(menu-item "Unmark All" dired-unmark-all-marks))
1423 '(menu-item "Mark Symlinks" dired-mark-symlinks
1427 '(menu-item "Mark Directories" dired-mark-directories
1430 '(menu-item "Mark Old Backups" dired-clean-directory
1433 '(menu-item "Mark Executables" dired-mark-executables
1436 '(menu-item "Flag Garbage Files" dired-flag-garbage-files
1439 '(menu-item "Flag Backup Files" dired-flag-backup-files
1442 '(menu-item "Flag Auto-save Files" dired-flag-auto-save-files
1445 '(menu-item "Flag" dired-flag-file-deletion
1448 '(menu-item "Unmark" dired-unmark
1451 '(menu-item "Mark" dired-mark
1454 '(menu-item "Toggle Marks" dired-toggle-marks
1464 [menu-bar operate image-dired-delete-tag]
1465 '(menu-item "Delete Image Tag..." image-dired-delete-tag
1468 [menu-bar operate image-dired-tag-files]
1469 '(menu-item "Add Image Tags..." image-dired-tag-files
1472 [menu-bar operate image-dired-dired-comment-files]
1473 '(menu-item "Add Image Comment..." image-dired-dired-comment-files
1476 [menu-bar operate image-dired-display-thumbs]
1477 '(menu-item "Display Image-Dired" image-dired-display-thumbs
1478 :help "Display image-dired for current or marked image files"))
1484 '(menu-item "Query Replace in Files..." dired-do-query-replace-regexp
1487 '(menu-item "Search Files..." dired-do-search
1490 '(menu-item "Change Owner..." dired-do-chown
1494 '(menu-item "Change Group..." dired-do-chgrp
1498 '(menu-item "Change Mode..." dired-do-chmod
1501 '(menu-item "Change Timestamp..." dired-do-touch
1504 '(menu-item "Load" dired-do-load
1507 '(menu-item "Byte-compile" dired-do-byte-compile
1510 '(menu-item "Compress" dired-do-compress
1513 '(menu-item "Print..." dired-do-print
1516 '(menu-item "Hardlink to..." dired-do-hardlink
1519 '(menu-item "Symlink to..." dired-do-symlink
1523 '(menu-item "Shell Command..." dired-do-shell-command
1526 '(menu-item "Delete" dired-do-delete
1528 (define-key map [menu-bar operate rename]
1529 '(menu-item "Rename to..." dired-do-rename
1532 '(menu-item "Copy to..." dired-do-copy
1536 "Local keymap for `dired-mode' buffers.")
1540 (put 'dired-mode 'mode-class 'special)
1544 (defun dired-mode (&optional dirname switches)
1555 You can move using the usual cursor motion commands.\\<dired-mode-map>
1557 Instead, type \\[dired-flag-file-deletion] to flag a file for Deletion.
1558 Type \\[dired-mark] to Mark a file or subdirectory for later commands.
1563 Mark-using commands display a list of failures afterwards. Type \\[dired-summary]
1565 Type \\[dired-unmark] to Unmark a file or all files of a subdirectory.
1566 Type \\[dired-unmark-backward] to back up one line and unflag.
1567 Type \\[dired-do-flagged-delete] to eXecute the deletions requested.
1568 Type \\[dired-advertised-find-file] to Find the current line's file
1569 (or dired it in another buffer, if it is a directory).
1570 Type \\[dired-find-file-other-window] to find file or dired directory in Other window.
1571 Type \\[dired-maybe-insert-subdir] to Insert a subdirectory in this buffer.
1572 Type \\[dired-do-rename] to Rename a file or move the marked files to another directory.
1573 Type \\[dired-do-copy] to Copy files.
1574 Type \\[dired-sort-toggle-or-edit] to toggle Sorting by name/date or change the `ls' switches.
1581 directories again, type \\[dired-do-redisplay] \
1583 subdirectory, or type \\[dired-build-subdir-alist] to parse the buffer
1586 Customization variables (rename this buffer and type \\[describe-variable] on each line
1589 `dired-listing-switches'
1590 `dired-trivial-filenames'
1591 `dired-shrink-to-fit'
1592 `dired-marker-char'
1593 `dired-del-marker'
1594 `dired-keep-marker-rename'
1595 `dired-keep-marker-copy'
1596 `dired-keep-marker-hardlink'
1597 `dired-keep-marker-symlink'
1601 `dired-before-readin-hook'
1602 `dired-after-readin-hook'
1603 `dired-mode-hook'
1604 `dired-load-hook'
1607 \\{dired-mode-map}"
1608 ;; Not to be called interactively (e.g. dired-directory will be set
1611 (use-local-map dired-mode-map)
1612 (dired-advertise) ; default-directory is already set
1613 (setq major-mode 'dired-mode
1621 (function dired-revert))
1623 (function dired-buffer-stale-p))
1626 (set (make-local-variable 'dired-directory)
1630 (expand-file-name (if (listp dired-directory)
1631 (car dired-directory)
1632 dired-directory)))
1633 (set (make-local-variable 'dired-actual-switches)
1634 (or switches dired-listing-switches))
1636 '(dired-font-lock-keywords t nil nil beginning-of-line))
1638 'dired-desktop-buffer-misc-data)
1639 (setq dired-switches-alist nil)
1640 (dired-sort-other dired-actual-switches t)
1643 (append dired-dnd-protocol-alist dnd-protocol-alist)))
1644 (run-mode-hooks 'dired-mode-hook))
1647 ;; Idiosyncratic dired commands that don't deal with marks.
1649 (defun dired-summary ()
1650 "Summarize basic Dired commands and show recent dired errors."
1652 (dired-why)
1657 (defun dired-undo ()
1658 "Undo in a dired buffer.
1664 (dired-build-subdir-alist)
1665 (message "Change in dired buffer undone.
1668 (defun dired-next-line (arg)
1673 (dired-move-to-filename))
1675 (defun dired-previous-line (arg)
1680 (dired-move-to-filename))
1682 (defun dired-next-dirline (arg &optional opoint)
1687 (re-search-forward dired-re-dir nil t arg)
1689 (re-search-backward dired-re-dir nil t (- arg)))
1690 (dired-move-to-filename) ; user may type `i' or `f'
1694 (defun dired-prev-dirline (arg)
1697 (dired-next-dirline (- arg)))
1699 (defun dired-up-directory (&optional other-window)
1704 (let* ((dir (dired-current-directory))
1706 (or (dired-goto-file (directory-file-name dir))
1707 ;; Only try dired-goto-subdir if buffer has more than one dir.
1708 (and (cdr dired-subdir-alist)
1709 (dired-goto-subdir up))
1712 (dired-other-window up)
1713 (dired up))
1714 (dired-goto-file dir)))))
1716 (defun dired-get-file-for-visit ()
1720 (let ((raw (dired-get-filename nil t))
1729 (error "File no longer exists; type `g' to update dired buffer")))))
1732 (defalias 'dired-advertised-find-file 'dired-find-file)
1733 (defun dired-find-file ()
1736 ;; Bind `find-file-run-dired' so that the command works on directories
1738 (let ((find-file-run-dired t))
1739 (find-file (dired-get-file-for-visit))))
1741 (defun dired-find-alternate-file ()
1742 "In Dired, visit this file or directory instead of the dired buffer."
1745 (find-alternate-file (dired-get-file-for-visit)))
1747 ;;;###autoload (put 'dired-find-alternate-file 'disabled t)
1749 (defun dired-mouse-find-file-other-window (event)
1760 (setq file (dired-get-file-for-visit)))
1762 (or (and (cdr dired-subdir-alist)
1763 (dired-goto-subdir file))
1766 (dired-other-window file)))
1770 (defun dired-view-file ()
1775 (let ((file (dired-get-file-for-visit)))
1777 (or (and (cdr dired-subdir-alist)
1778 (dired-goto-subdir file))
1779 (dired file))
1782 (defun dired-find-file-other-window ()
1785 (find-file-other-window (dired-get-file-for-visit)))
1787 (defun dired-display-file ()
1790 (display-buffer (find-file-noselect (dired-get-file-for-visit))))
1795 (defun dired-get-filename (&optional localp no-error-if-not-filep)
1807 (if (setq p1 (dired-move-to-filename (not no-error-if-not-filep)))
1808 (setq p2 (dired-move-to-end-of-filename no-error-if-not-filep))))
1814 ;; Unquote names quoted by ls or by dired-insert-directory.
1822 (or (dired-string-replace-match
1856 ((equal (dired-current-directory) "/")
1857 (setq file (concat (dired-current-directory localp) file))
1866 (concat (dired-current-directory localp) file)))))
1868 (defun dired-string-replace-match (regexp string newtext
1885 (defun dired-make-absolute (file &optional dir)
1892 ;; dired-get-filename.
1895 (defun dired-make-relative (file &optional dir ignore)
1911 ;;; Functions for finding the file name in a dired buffer line.
1913 (defvar dired-permission-flags-regexp
1919 (defun dired-move-to-filename (&optional raise-error eol)
1925 ;; First try assuming `ls --dired' was used.
1926 (let ((change (next-single-property-change (point) 'dired-filename nil eol)))
1932 ((re-search-forward dired-permission-flags-regexp eol t)
1941 (defun dired-move-to-end-of-filename (&optional no-error)
1945 ;; (dired-move-to-filename t).
1948 (if (get-text-property (point) 'dired-filename)
1949 (goto-char (next-single-property-change (point) 'dired-filename))
1952 (setq used-F (string-match "F" dired-actual-switches)
1965 dired-permission-flags-regexp nil t)
1984 dired-ls-F-marks-symlinks
1999 "File line is hidden, type \\[dired-hide-subdir] to unhide")
2009 (defun dired-copy-filename-as-kill (&optional arg)
2013 With \\[universal-argument], use the file name relative to the dired buffer's
2022 (or (dired-get-subdir)
2026 (dired-get-marked-files))
2028 (dired-get-marked-files t))
2030 (dired-get-marked-files
2032 (dired-get-marked-files 'no-dir))
2043 (defun dired-buffers-for-dir (dir &optional file)
2044 ;; Return a list of buffers that dired DIR (top level or in-situ subdir).
2048 ;; As a side effect, killed dired buffers for DIR are removed from
2049 ;; dired-buffers.
2051 (let ((alist dired-buffers) result elt buf)
2056 (if (dired-in-this-tree dir (car elt))
2058 (and (assoc dir dired-subdir-alist)
2061 (file-name-nondirectory dired-directory)))
2063 (string-match (dired-glob-regexp wildcards)
2067 (setq dired-buffers (delq elt dired-buffers)))
2071 (defun dired-glob-regexp (pattern)
2107 (defun dired-advertise ()
2108 ;;"Advertise in variable `dired-buffers' that we dired `default-directory'."
2111 (if (memq (current-buffer) (dired-buffers-for-dir expanded-default))
2113 (setq dired-buffers
2115 dired-buffers)))))
2117 (defun dired-unadvertise (dir)
2118 ;; Remove DIR from the buffer alist in variable dired-buffers.
2121 ;; Removing is also done as a side-effect in dired-buffer-for-dir.
2122 (setq dired-buffers
2123 (delq (assoc (expand-file-name dir) dired-buffers) dired-buffers)))
2130 (defun dired-in-this-tree (file dir)
2135 (defun dired-normalize-subdir (dir)
2137 ;; dired-get-filename must be able to make a valid file name from a
2144 (defun dired-get-subdir ()
2148 (let ((cur-dir (dired-current-directory)))
2151 (dired-get-subdir-min (assoc cur-dir
2152 dired-subdir-alist))))
2155 ;(defun dired-get-subdir-min (elt)
2157 ;; can't use macro, must be redefinable for other alist format in dired-nstd.
2158 (defalias 'dired-get-subdir-min 'cdr)
2160 (defun dired-get-subdir-max (elt)
2162 (goto-char (dired-get-subdir-min elt))
2163 (dired-subdir-max)))
2165 (defun dired-clear-alist ()
2166 (while dired-subdir-alist
2167 (set-marker (dired-get-subdir-min (car dired-subdir-alist)) nil)
2168 (setq dired-subdir-alist (cdr dired-subdir-alist))))
2170 (defun dired-subdir-index (dir)
2173 (let (found (index 0) (alist dired-subdir-alist))
2180 (defun dired-next-subdir (arg &optional no-error-if-not-found no-skip)
2184 ;; position was found in dired-subdir-alist.
2186 (let ((this-dir (dired-current-directory))
2189 (setq index (- (dired-subdir-index this-dir) arg))
2191 (dired-get-subdir-min (nth index dired-subdir-alist))))
2201 (defun dired-build-subdir-alist (&optional switches)
2202 "Build `dired-subdir-alist' by parsing the buffer.
2205 instead of `dired-actual-switches'."
2207 (dired-clear-alist)
2212 (switches (or switches dired-actual-switches))
2221 (setq dired-subdir-alist nil)
2222 (while (re-search-forward dired-subdir-regexp nil t)
2229 (save-match-data (looking-at dired-re-perms)))
2245 (dired-alist-add-1 new-dir-name
2255 dired-subdir-alist))
2257 (defun dired-alist-add-1 (dir new-marker)
2259 (setq dired-subdir-alist
2260 (cons (cons (dired-normalize-subdir dir) new-marker)
2261 dired-subdir-alist)))
2263 (defun dired-goto-next-nontrivial-file ()
2265 (dired-goto-next-file);; so there is a file to compare with
2266 (if (stringp dired-trivial-filenames)
2268 (string-match dired-trivial-filenames
2270 (or (dired-get-filename nil t) ""))))
2272 (dired-move-to-filename))))
2274 (defun dired-goto-next-file ()
2275 (let ((max (1- (dired-subdir-max))))
2276 (while (and (not (dired-move-to-filename)) (< (point) max))
2279 (defun dired-goto-file (file)
2280 "Go to line describing file FILE in this dired buffer."
2290 (dired-current-directory))))
2297 ;; The hair here is to get the result of dired-goto-subdir
2301 (and (cdr dired-subdir-alist)
2302 (dired-goto-subdir dir)))
2305 (boundary (dired-subdir-max)))
2318 (if (equal base (dired-get-filename 'no-dir t))
2323 (setq found (dired-move-to-filename))
2331 (defun dired-initial-position (dirname)
2334 ;; You may redefine this function as you wish, e.g. like in dired-x.el.
2336 (if dired-trivial-filenames (dired-goto-next-nontrivial-file)))
2339 ;; These are hooks which make tree dired work.
2340 ;; They are in this file because other parts of dired need to call them.
2341 ;; But they don't call the rest of tree dired unless there are subdirs loaded.
2346 ;; dired-get-filename. Make it a defsubst?
2347 (defun dired-current-directory (&optional localp)
2352 (alist (or dired-subdir-alist
2353 ;; probably because called in a non-dired buffer
2360 alist (if (<= (dired-get-subdir-min elt) here)
2364 (dired-make-relative dir default-directory)
2370 (defun dired-subdir-max ()
2372 (if (or (null (cdr dired-subdir-alist)) (not (dired-next-subdir 1 t t)))
2379 (defcustom dired-recursive-deletes nil ; Default only delete empty directories.
2391 :group 'dired)
2394 (defvar dired-re-no-dot "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")
2397 ;; This function is usefull outside of dired. One could change it's name
2399 (defun dired-delete-file (file &optional recursive) "\
2401 RECURSIVE determines what to do with a non-empty directory. If RECURSIVE is:
2402 nil, do not delete.
2414 (directory-files file t dired-re-no-dot)) ; Not empty.
2417 (dired-make-relative file)))))
2420 (dired-delete-file (car files) recursive)
2424 (defun dired-do-flagged-delete (&optional nomessage)
2428 `dired-recursive-deletes' controls whether
2431 (let* ((dired-marker-char dired-del-marker)
2432 (regexp (dired-marker-regexp))
2436 (dired-internal-do-deletions
2438 (dired-map-over-marks (cons (dired-get-filename) (point))
2444 (defun dired-do-delete (&optional arg)
2446 `dired-recursive-deletes' controls whether
2449 ;; dired-do-flagged-delete.
2451 (dired-internal-do-deletions
2453 (dired-map-over-marks (cons (dired-get-filename) (point))
2457 (defvar dired-deletion-confirmer 'yes-or-no-p) ; or y-or-n-p?
2459 (defun dired-internal-do-deletions (l arg)
2463 ;; (car L) *must* be the *last* (bottommost) file in the dired buffer.
2464 ;; That way as changes are made in the buffer they do not shift the
2472 (setq files (nreverse (mapcar (function dired-make-relative) files)))
2473 (if (dired-mark-pop-up
2474 " *Deletions*" 'delete files dired-deletion-confirmer
2475 (format "Delete %s " (dired-mark-prompt arg files)))
2483 (dired-delete-file fn dired-recursive-deletes)
2487 (dired-fun-in-all-buffers
2489 (function dired-delete-entry) fn))
2491 (dired-log "%s\n" err)
2495 (message "%d deletion%s done" count (dired-plural-s count))
2496 (dired-log-summary
2499 (dired-plural-s count))
2502 (dired-move-to-filename))
2504 (defun dired-fun-in-all-buffers (directory file fun &rest args)
2505 ;; In all buffers dired'ing DIRECTORY, run FUN with ARGS.
2511 (dolist (buf (dired-buffers-for-dir (expand-file-name directory)
2519 (defun dired-delete-entry (file)
2521 (and (dired-goto-file file)
2525 (dired-clean-up-after-deletion file))
2527 ;; This is a separate function for the sake of dired-x.el.
2528 (defun dired-clean-up-after-deletion (fn)
2530 (save-excursion (and (cdr dired-subdir-alist)
2531 (dired-goto-subdir fn)
2532 (dired-kill-subdir))))
2537 (defun dired-marker-regexp ()
2538 (concat "^" (regexp-quote (char-to-string dired-marker-char))))
2540 (defun dired-plural-s (count)
2543 (defun dired-mark-prompt (arg files)
2556 (format "%c [%d files]" dired-marker-char count)))))
2558 (defun dired-pop-to-buffer (buf)
2560 ;; If dired-shrink-to-fit is t, make its window fit its contents.
2561 (if (not dired-shrink-to-fit)
2599 (defcustom dired-no-confirm nil
2604 :group 'dired
2612 (defun dired-mark-pop-up (bufname op-symbol files function &rest args)
2616 This uses function `dired-pop-to-buffer' to do that.
2621 OP-SYMBOL is a member of the list in `dired-no-confirm'.
2626 (if (or (eq dired-no-confirm t)
2627 (memq op-symbol dired-no-confirm)
2636 (dired-format-columns-of-files (if (eq (car files) t) (cdr files) files))
2640 (dired-pop-to-buffer bufname)
2643 (defun dired-format-columns-of-files (files)
2673 (defun dired-repeat-over-lines (arg function)
2680 (while (and (not (eobp)) (dired-between-files)) (forward-line 1))
2691 (while (and (not (bobp)) (dired-between-files)) (forward-line -1))
2695 (dired-move-to-filename)))
2697 (defun dired-between-files ()
2701 (save-excursion (not (dired-move-to-filename))))
2703 (defun dired-next-marked-file (arg &optional wrap opoint)
2708 (re-search-forward dired-re-mark nil t arg)
2710 (re-search-backward dired-re-mark nil t (- arg)))
2711 (dired-move-to-filename)
2718 (dired-next-marked-file arg nil opoint))))
2720 (defun dired-prev-marked-file (arg &optional wrap)
2723 (dired-next-marked-file (- arg) wrap))
2725 (defun dired-file-marker (file)
2728 (and (dired-goto-file file)
2734 (defun dired-mark-files-in-region (start end)
2741 (while (and (< (point) end) (dired-between-files))
2743 (if (and (not (looking-at dired-re-dot))
2744 (dired-get-filename nil t))
2747 (insert dired-marker-char)))
2750 (defun dired-mark (arg)
2754 Use \\[dired-unmark-all-files] to remove all marks
2755 and \\[dired-unmark] on a subdir to remove the marks in
2758 (if (dired-get-subdir)
2759 (save-excursion (dired-mark-subdir-files))
2761 (dired-repeat-over-lines
2763 (function (lambda () (delete-char 1) (insert dired-marker-char)))))))
2765 (defun dired-unmark (arg)
2769 (let ((dired-marker-char ?\040))
2770 (dired-mark arg)))
2772 (defun dired-flag-file-deletion (arg)
2778 (let ((dired-marker-char dired-del-marker))
2779 (dired-mark arg)))
2781 (defun dired-unmark-backward (arg)
2785 (dired-unmark (- arg)))
2787 (defun dired-toggle-marks ()
2797 (or (dired-between-files)
2798 (looking-at dired-re-dot)
2805 (list ?\040 dired-marker-char)
2806 (list dired-marker-char ?\040))))
2812 (defvar dired-regexp-history nil
2815 (defun dired-read-regexp (prompt)
2816 (read-from-minibuffer prompt nil nil nil 'dired-regexp-history))
2818 (defun dired-mark-files-regexp (regexp &optional marker-char)
2826 (list (dired-read-regexp (concat (if current-prefix-arg "Unmark" "Mark")
2829 (let ((dired-marker-char (or marker-char dired-marker-char)))
2830 (dired-mark-if
2831 (and (not (looking-at dired-re-dot))
2833 (let ((fn (dired-get-filename nil t)))
2837 (defun dired-mark-files-containing-regexp (regexp &optional marker-char)
2842 (list (dired-read-regexp (concat (if current-prefix-arg "Unmark" "Mark")
2845 (let ((dired-marker-char (or marker-char dired-marker-char)))
2846 (dired-mark-if
2847 (and (not (looking-at dired-re-dot))
2849 (let ((fn (dired-get-filename nil t)))
2854 ;; For now we do it inside emacs
2868 (defun dired-flag-files-regexp (regexp)
2873 (interactive (list (dired-read-regexp "Flag for deletion (regexp): ")))
2874 (dired-mark-files-regexp regexp dired-del-marker))
2876 (defun dired-mark-symlinks (unflag-p)
2880 (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char)))
2881 (dired-mark-if (looking-at dired-re-sym) "symbolic link")))
2883 (defun dired-mark-directories (unflag-p)
2887 (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char)))
2888 (dired-mark-if (and (looking-at dired-re-dir)
2889 (not (looking-at dired-re-dot)))
2892 (defun dired-mark-executables (unflag-p)
2896 (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char)))
2897 (dired-mark-if (looking-at dired-re-exe) "executable file")))
2899 ;; dired-x.el has a dired-mark-sexp interactive command: mark
2902 (defun dired-flag-auto-save-files (&optional unflag-p)
2906 (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker)))
2907 (dired-mark-if
2921 (not (looking-at dired-re-dir))
2922 (let ((fn (dired-get-filename t t)))
2927 (defcustom dired-garbage-files-regexp
2933 "Regular expression to match \"garbage\" files for `dired-flag-garbage-files'."
2935 :group 'dired)
2937 (defun dired-flag-garbage-files ()
2938 "Flag for deletion all files that match `dired-garbage-files-regexp'."
2940 (dired-flag-files-regexp dired-garbage-files-regexp))
2942 (defun dired-flag-backup-files (&optional unflag-p)
2946 (let ((dired-marker-char (if unflag-p ?\s dired-del-marker)))
2947 (dired-mark-if
2959 (not (looking-at dired-re-dir))
2960 (let ((fn (dired-get-filename t t)))
2964 (defun dired-change-marks (&optional old new)
2982 (dired-get-filename 'no-dir t))
2987 (defun dired-unmark-all-marks ()
2988 "Remove all marks from all files in the dired buffer."
2990 (dired-unmark-all-files ?\r))
2992 (defun dired-unmark-all-files (mark &optional arg)
3008 (re-search-forward dired-re-mark nil t)
3011 (let ((file (dired-get-filename t t)))
3013 (dired-query 'query "Unmark file `%s'? "
3025 (defvar dired-log-buffer "*Dired log*")
3027 (defun dired-why ()
3032 (if (get-buffer dired-log-buffer)
3034 (window (display-buffer (get-buffer dired-log-buffer))))
3044 (defun dired-log (log &rest args)
3048 ;; End each bunch of errors with (dired-log t):
3052 (with-current-buffer (get-buffer-create dired-log-buffer)
3070 (defun dired-log-summary (string failures)
3077 (with-current-buffer dired-log-buffer
3086 (dired-log (concat "\n" string "\n"))
3087 (dired-log t))
3096 (defvar dired-ls-sorting-switches "SXU"
3103 variable `dired-listing-switches'. To temporarily override the listing
3104 format, use `\\[universal-argument] \\[dired]'.")
3106 (defvar dired-sort-by-date-regexp
3107 (concat "^-[^" dired-ls-sorting-switches
3108 "]*t[^" dired-ls-sorting-switches "]*$")
3111 (defvar dired-sort-by-name-regexp
3112 (concat "^-[^t" dired-ls-sorting-switches "]+$")
3115 (defvar dired-sort-inhibit nil
3117 The idea is to set this buffer-locally in special dired buffers.")
3119 (defun dired-sort-set-modeline ()
3120 ;; Set modeline display according to dired-actual-switches.
3124 (when (eq major-mode 'dired-mode)
3128 dired-sort-by-name-regexp dired-actual-switches)
3131 dired-sort-by-date-regexp dired-actual-switches)
3134 (concat "Dired " dired-actual-switches)))))
3137 (defun dired-sort-toggle-or-edit (&optional arg)
3138 "Toggle between sort by date/name and refresh the dired buffer.
3141 (when dired-sort-inhibit
3142 (error "Cannot sort this dired buffer"))
3144 (dired-sort-other
3145 (read-string "ls switches (must contain -l): " dired-actual-switches))
3146 (dired-sort-toggle)))
3148 (defun dired-sort-toggle ()
3150 (setq dired-actual-switches
3152 (if (string-match " " dired-actual-switches)
3154 (if (string-match " -t\\'" dired-actual-switches)
3155 (substring dired-actual-switches 0 (match-beginning 0))
3156 (concat dired-actual-switches " -t"))
3160 (dired-replace-in-string (concat "[-lt"
3161 dired-ls-sorting-switches "]")
3163 dired-actual-switches)
3164 (if (string-match (concat "[t" dired-ls-sorting-switches "]")
3165 dired-actual-switches)
3168 (dired-sort-set-modeline)
3171 ;; Some user code loads dired especially for this.
3172 ;; Don't do that--use replace-regexp-in-string instead.
3173 (defun dired-replace-in-string (regexp newtext string)
3184 (defun dired-sort-other (switches &optional no-revert)
3185 "Specify new `ls' SWITCHES for current dired buffer.
3186 Values matching `dired-sort-by-date-regexp' or `dired-sort-by-name-regexp'
3189 (dired-sort-R-check switches)
3190 (setq dired-actual-switches switches)
3191 (dired-sort-set-modeline)
3194 (defvar dired-subdir-alist-pre-R nil
3195 "Value of `dired-subdir-alist' before -R switch added.")
3196 (make-variable-buffer-local 'dired-subdir-alist-pre-R)
3198 (defun dired-sort-R-check (switches)
3200 Saves `dired-subdir-alist' when R is set and restores saved value
3202 To be called first in body of `dired-sort-other', etc."
3205 (not (string-match "R" dired-actual-switches)))
3206 ;; Adding -R to ls switches -- save `dired-subdir-alist':
3207 (setq dired-subdir-alist-pre-R dired-subdir-alist))
3208 ((and (string-match "R" dired-actual-switches)
3212 (setq dired-subdir-alist
3213 (if dired-subdir-alist-pre-R
3215 (while dired-subdir-alist-pre-R
3216 (if (assoc (caar dired-subdir-alist-pre-R)
3217 dired-subdir-alist)
3220 (cons (car dired-subdir-alist-pre-R)
3222 (setq dired-subdir-alist-pre-R
3223 (cdr dired-subdir-alist-pre-R)))
3227 (list (car (reverse dired-subdir-alist))))))))
3233 (defcustom dired-recursive-copies nil
3244 :group 'dired)
3246 (defun dired-dnd-popup-notice ()
3248 "Recursive copies not enabled.\nSee variable dired-recursive-copies."))
3251 (defun dired-dnd-do-ask-action (uri)
3264 (dired-dnd-handle-local-file uri action)
3267 (defun dired-dnd-handle-local-file (uri action)
3268 "Copy, move or link a file to the dired directory.
3271 (require 'dired-aux)
3273 (to (if from (concat (dired-current-directory)
3280 ;; If copying a directory and dired-recursive-copies is nil,
3281 ;; dired-copy-file silently fails. Pop up a notice.
3283 (not dired-recursive-copies))
3284 (dired-dnd-popup-notice)
3286 (dired-copy-file from to 1)
3287 (dired-relist-entry to)
3291 (dired-rename-file from to 1)
3292 (dired-relist-entry to)
3297 (dired-relist-entry to)
3301 (dired-dnd-do-ask-action uri))
3305 (defun dired-dnd-handle-file (uri action)
3306 "Copy, move or link a file to the dired directory if it is a local file.
3307 URI is the file to handle. If the hostname in the URI isn't local, do nothing.
3311 (if local-file (dired-dnd-handle-local-file local-file action)
3320 (defun dired-desktop-buffer-misc-data (desktop-dirname)
3323 ;; Value of `dired-directory'.
3324 (if (consp dired-directory)
3326 (cons (desktop-file-name (car dired-directory) desktop-dirname)
3327 (cdr dired-directory))
3329 (desktop-file-name dired-directory desktop-dirname))
3330 ;; Subdirectories in `dired-subdir-alist'.
3335 dired-subdir-alist)))))
3337 (defun dired-restore-desktop-buffer (desktop-buffer-file-name
3340 "Restore a dired buffer specified in a desktop file."
3341 ;; First element of `desktop-buffer-misc' is the value of `dired-directory'.
3344 (let* ((dired-dir (car desktop-buffer-misc))
3345 (dir (if (consp dired-dir) (car dired-dir) dired-dir)))
3348 (dired dired-dir)
3350 ;; from `dired-subdir-alist'.
3351 (mapcar 'dired-maybe-insert-subdir (cdr desktop-buffer-misc))
3358 '(dired-mode . dired-restore-desktop-buffer))
3363 (load "dired-vms"))
3365 (provide 'dired)
3367 (run-hooks 'dired-load-hook) ; for your customizations
3370 ;;; dired.el ends here