• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/

Lines Matching +refs:dired +refs:diff

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.
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))
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)))
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)
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
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)
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))))
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"))
1339 (define-key map [menu-bar immediate backup-diff]
1340 '(menu-item "Compare with Backup" dired-backup-diff
1342 (define-key map [menu-bar immediate 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
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
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
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) "\
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.
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)))
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.
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.
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