Mercurial > hg > xemacs-beta
comparison lisp/efs/dired-fsf.el @ 98:0d2f883870bc r20-1b1
Import from CVS: tag r20-1b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:13:56 +0200 |
parents | 8fc7fe29b841 |
children |
comparison
equal
deleted
inserted
replaced
97:498bf5da1c90 | 98:0d2f883870bc |
---|---|
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
2 ;; | |
3 ;; File: dired-fsf.el | |
4 ;; Dired Version: $Revision: 1.1 $ | |
5 ;; RCS: | |
6 ;; Description: dired functions for V19 of the original GNU Emacs from FSF | |
7 ;; Created: Sat Jan 29 01:38:49 1994 by sandy on ibm550 | |
8 ;; | |
9 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
10 | |
11 ;;;; Requirements and provisions | |
12 (provide 'dired-fsf) | |
13 (require 'dired) | |
14 | |
15 ;;;; Variables to set. | |
16 | |
17 (setq dired-modeline-tracking-cmds '(mouse-set-point)) | |
18 | |
19 ;;;; Support for text properties | |
20 | |
21 (defun dired-insert-set-properties (beg end) | |
22 ;; Sets the text properties for the file names. | |
23 (save-excursion | |
24 (goto-char beg) | |
25 (beginning-of-line) | |
26 (let ((eol (save-excursion (end-of-line) (point))) | |
27 (bol (point))) | |
28 (while (< (point) end) | |
29 (setq eol (save-excursion (end-of-line) (point))) | |
30 (if (dired-manual-move-to-filename nil bol eol) | |
31 (dired-set-text-properties | |
32 (point) (dired-manual-move-to-end-of-filename nil bol eol))) | |
33 (goto-char (setq bol (1+ eol))))))) | |
34 | |
35 (defun dired-remove-text-properties (start end &optional object) | |
36 ;; Removes text properties. Called in popup buffers. | |
37 (remove-text-properties start end '(mouse-face dired-file-name) object)) | |
38 | |
39 (defun dired-set-text-properties (start end) | |
40 ;; Sets dired's text properties | |
41 (put-text-property start end 'mouse-face 'highlight) | |
42 (put-text-property start end 'dired-file-name t)) | |
43 | |
44 (defun dired-move-to-filename (&optional raise-error bol eol) | |
45 (or bol (setq bol (save-excursion | |
46 (skip-chars-backward "^\n\r") | |
47 (point)))) | |
48 (or eol (setq eol (save-excursion | |
49 (skip-chars-forward "^\n\r") | |
50 (point)))) | |
51 (goto-char bol) | |
52 (let ((spot (next-single-property-change bol 'dired-file-name nil eol))) | |
53 (if (= spot eol) | |
54 (if raise-error | |
55 (error "No file on this line") | |
56 nil) | |
57 (goto-char spot)))) | |
58 | |
59 (defun dired-move-to-end-of-filename (&optional no-error bol eol) | |
60 ;; Assumes point is at beginning of filename, | |
61 ;; thus the rwx bit re-search-backward below will succeed in *this* | |
62 ;; line if at all. So, it should be called only after | |
63 ;; (dired-move-to-filename t). | |
64 ;; On failure, signals an error (with non-nil NO-ERROR just returns nil). | |
65 (or eol (setq eol (save-excursion (skip-chars-forward "^\r\n") (point)))) | |
66 (and | |
67 (null no-error) | |
68 selective-display | |
69 (or bol (setq bol (save-excursion (skip-chars-backward "^\r\n") (point)))) | |
70 (eq (char-after (1- bol)) ?\r) | |
71 (cond | |
72 ((dired-subdir-hidden-p (dired-current-directory)) | |
73 (error | |
74 (substitute-command-keys | |
75 "File line is hidden. Type \\[dired-hide-subdir] to unhide."))) | |
76 ((error | |
77 (substitute-command-keys | |
78 "File line is omitted. Type \\[dired-omit-toggle] to un-omit."))))) | |
79 (if (get-text-property (point) 'dired-file-name nil) | |
80 (goto-char (next-single-property-change (point) 'dired-file-name | |
81 nil eol)) | |
82 (and (null no-error) (error "No file on this line")))) | |
83 | |
84 ;; Text properties do not work properly in pre-19.26. | |
85 | |
86 (if (or (not (boundp 'emacs-major-version)) | |
87 (= emacs-major-version 19)) | |
88 (progn | |
89 (if (not (boundp 'emacs-minor-version)) | |
90 ;; Argument structure of where-is-internal went through some | |
91 ;; changes. | |
92 (defun dired-key-description (cmd &rest prefixes) | |
93 ;; Return a key description string for a menu. | |
94 ;; If prefixes are given, they should be either strings, | |
95 ;; integers, or 'universal-argument. | |
96 (let ((key (where-is-internal cmd dired-mode-map nil t))) | |
97 (if key | |
98 (key-description | |
99 (apply 'vconcat | |
100 (append | |
101 (mapcar | |
102 (function | |
103 (lambda (x) | |
104 (if (eq x 'universal-argument) | |
105 (where-is-internal 'universal-argument | |
106 dired-mode-map nil t) | |
107 x))) | |
108 prefixes) | |
109 (list key)))) | |
110 "")))) | |
111 (if (or (not (boundp 'emacs-minor-version)) | |
112 (< emacs-minor-version 26)) | |
113 (progn | |
114 (fset 'dired-insert-set-properties 'ignore) | |
115 (fset 'dired-remove-text-properties 'ignore) | |
116 (fset 'dired-set-text-properties 'ignore) | |
117 (fset 'dired-move-to-filename 'dired-manual-move-to-filename) | |
118 (fset 'dired-move-to-end-of-filename | |
119 'dired-manual-move-to-end-of-filename))))) | |
120 | |
121 ;;;; Keymaps | |
122 | |
123 ;;; Caching Menus | |
124 | |
125 (defun dired-menu-item (menu-item cmd width &rest prefixes) | |
126 ;; Return a key description string for a menu. If prefixes are given, | |
127 ;; they should be either characters, or 'universal-argument. | |
128 (let ((desc (apply 'dired-key-description cmd prefixes))) | |
129 (if (string-equal desc "") | |
130 menu-item | |
131 (concat menu-item | |
132 (make-string | |
133 (max (- width (length menu-item) (length desc) 2) 1) 32) | |
134 "(" desc ")")))) | |
135 | |
136 (defun dired-cache-key (keymap event cmd &rest prefixes) | |
137 ;; Caches a keybinding for cms in a menu keymap. | |
138 ;; This is able to handle prefix keys. | |
139 (let ((desc (apply 'dired-key-description cmd prefixes))) | |
140 (or (string-equal desc "") | |
141 (progn | |
142 (let ((elt (assq event keymap))) | |
143 (if elt | |
144 (let ((tail (cdr elt))) | |
145 (setcdr tail | |
146 (cons | |
147 (cons | |
148 nil (concat " (" desc ")")) | |
149 (cdr tail)))))))))) | |
150 | |
151 ;; Don't cache keys in old emacs versions. Is 23 the right cut-off point? | |
152 (if (or (not (boundp 'emacs-minor-version)) | |
153 (< emacs-minor-version 23)) | |
154 (fset 'dired-cache-key 'ignore)) | |
155 | |
156 (defvar dired-visit-popup-menu nil) | |
157 ;; Menus of commands in the Visit popup menu. | |
158 (defvar dired-do-popup-menu nil) | |
159 ;; Menu of commands in the dired Do popup menu. | |
160 | |
161 ;; Menus for the menu bar. | |
162 (defvar dired-subdir-menu | |
163 (cons "Subdir" (make-sparse-keymap "Subdir"))) | |
164 (defvar dired-mark-menu | |
165 (cons "Mark" (make-sparse-keymap "Mark"))) | |
166 (defvar dired-do-menu | |
167 (cons "Do" (make-sparse-keymap "Do"))) | |
168 (defvar dired-regex-menu | |
169 (cons "Regexp" (make-sparse-keymap "Regex"))) | |
170 (defvar dired-look-menu | |
171 (cons "Look" (make-sparse-keymap "Look"))) | |
172 (defvar dired-sort-menu | |
173 (cons "Sort" (make-sparse-keymap "Sort"))) | |
174 (defvar dired-help-menu nil) | |
175 | |
176 (defun dired-setup-menus () | |
177 | |
178 ;; popup menu | |
179 | |
180 (setq dired-visit-popup-menu | |
181 (list | |
182 (cons (dired-menu-item "Find File" 'dired-find-file 35) | |
183 'dired-advertised-find-file) | |
184 (cons (dired-menu-item "Find in Other Window" | |
185 'dired-find-file-other-window 35) | |
186 'dired-find-file-other-window) | |
187 (cons (dired-menu-item "Find in Other Frame" | |
188 'dired-find-file-other-frame 35) | |
189 'dired-find-file-other-frame) | |
190 (cons (dired-menu-item "View File" 'dired-view-file 35) | |
191 'dired-view-file) | |
192 (cons (dired-menu-item "Display in Other Window" | |
193 'dired-find-file-other-window 35 | |
194 'universal-argument) | |
195 'dired-display-file))) | |
196 | |
197 ;; Operate popup menu | |
198 | |
199 (setq dired-do-popup-menu | |
200 (list | |
201 (cons (dired-menu-item "Copy to..." 'dired-do-copy 35 1) | |
202 'dired-do-copy) | |
203 (cons (dired-menu-item "Rename to..." 'dired-do-rename 35 1) | |
204 'dired-do-rename) | |
205 (cons (dired-menu-item "Compress/Uncompress" 'dired-do-compress | |
206 35 1) 'dired-do-compress) | |
207 (cons (dired-menu-item "Uuencode/Uudecode" 'dired-do-uucode | |
208 35 1) 'dired-do-uucode) | |
209 (cons (dired-menu-item "Change Mode..." 'dired-do-chmod 35 1) | |
210 'dired-do-chmod) | |
211 (cons (dired-menu-item "Change Owner..." 'dired-do-chown 35 1) | |
212 'dired-do-chown) | |
213 (cons (dired-menu-item "Change Group..." 'dired-do-chgrp 35 1) | |
214 'dired-do-chgrp) | |
215 (cons (dired-menu-item "Load" 'dired-do-load 35 1) | |
216 'dired-do-load) | |
217 (cons (dired-menu-item "Byte-compile" 'dired-do-byte-compile 35 1) | |
218 'dired-do-byte-compile) | |
219 (cons (dired-menu-item "Hardlink to..." 'dired-do-hardlink 35 1) | |
220 'dired-do-hardlink) | |
221 (cons (dired-menu-item "Symlink to..." 'dired-do-symlink 35 1) | |
222 'dired-do-symlink) | |
223 (cons (dired-menu-item "Relative Symlink to..." | |
224 'dired-do-relsymlink 35 1) | |
225 'dired-do-relsymlink) | |
226 (cons (dired-menu-item "Shell Command..." | |
227 'dired-do-shell-command 35 1) | |
228 'dired-do-shell-command) | |
229 (cons (dired-menu-item "Background Shell Command..." | |
230 'dired-do-background-shell-command 35 1) | |
231 'dired-do-background-shell-command) | |
232 (cons (dired-menu-item "Delete" 'dired-do-delete 35 1) | |
233 'dired-do-delete))) | |
234 | |
235 ;; Subdir Menu-bar Menu | |
236 | |
237 (define-key dired-mode-map [menu-bar subdir] dired-subdir-menu) | |
238 (define-key dired-mode-map [menu-bar subdir uncompress-subdir-files] | |
239 (cons "Uncompress Compressed Files" | |
240 (function | |
241 (lambda () (interactive) (dired-compress-subdir-files t))))) | |
242 (dired-cache-key dired-subdir-menu 'uncompress-subdir-files | |
243 'dired-compress-subdir-files 'universal-argument) | |
244 (define-key dired-mode-map [menu-bar subdir compress-subdir-files] | |
245 '("Compress Uncompressed Files" . dired-compress-subdir-files)) | |
246 (define-key dired-mode-map [menu-bar subdir flag] | |
247 '("Flag Files for Deletion" . dired-flag-subdir-files)) | |
248 (define-key dired-mode-map [menu-bar subdir mark] | |
249 '("Mark Files" . dired-mark-subdir-files)) | |
250 (define-key dired-mode-map [menu-bar subdir redisplay] | |
251 '("Redisplay Subdir" . dired-redisplay-subdir)) | |
252 (define-key dired-mode-map [menu-bar subdir subdir-separator] | |
253 '("-- Commands on All Files in Subdir --")) | |
254 (define-key dired-mode-map [menu-bar subdir kill-subdir] | |
255 '("Kill This Subdir" . dired-kill-subdir)) | |
256 (define-key dired-mode-map [menu-bar subdir create-directory] | |
257 '("Create Directory..." . dired-create-directory)) | |
258 (define-key dired-mode-map [menu-bar subdir insert] | |
259 '("Insert This Subdir" . dired-maybe-insert-subdir)) | |
260 (define-key dired-mode-map [menu-bar subdir down-dir] | |
261 '("Down Dir" . dired-down-directory)) | |
262 (define-key dired-mode-map [menu-bar subdir up-dir] | |
263 '("Up Dir" . dired-up-directory)) | |
264 (define-key dired-mode-map [menu-bar subdir prev-dirline] | |
265 '("Prev Dirline" . dired-prev-dirline)) | |
266 (define-key dired-mode-map [menu-bar subdir next-dirline] | |
267 '("Next Dirline" . dired-next-dirline)) | |
268 (define-key dired-mode-map [menu-bar subdir prev-subdir] | |
269 '("Prev Subdir" . dired-prev-subdir)) | |
270 (define-key dired-mode-map [menu-bar subdir next-subdir] | |
271 '("Next Subdir" . dired-next-subdir)) | |
272 | |
273 ;; Mark Menu-bar Menu | |
274 | |
275 (define-key dired-mode-map [menu-bar mark] dired-mark-menu) | |
276 (define-key dired-mode-map [menu-bar mark mark-from-compilation-buffer] | |
277 '("Mark Files from Compile Buffer..." . dired-mark-files-compilation-buffer)) | |
278 (define-key dired-mode-map [menu-bar mark mark-from-other-buffer] | |
279 '("Mark Files from Other Dired" . | |
280 dired-mark-files-from-other-dired-buffer)) | |
281 (define-key dired-mode-map [menu-bar mark mark-separator] | |
282 '("--")) | |
283 (define-key dired-mode-map [menu-bar mark marker-char-right] | |
284 '("Marker stack right" . dired-marker-stack-right)) | |
285 (define-key dired-mode-map [menu-bar mark marker-char-left] | |
286 '("Marker stack left" . dired-marker-stack-left)) | |
287 (define-key dired-mode-map [menu-bar mark restore-marker] | |
288 '("Restore marker char" . dired-restore-marker-char)) | |
289 (define-key dired-mode-map [menu-bar mark add-marker] | |
290 '("Set new marker char..." . dired-set-marker-char)) | |
291 (define-key dired-mode-map [menu-bar mark auto-save-files] | |
292 '("Flag Auto-save Files" . dired-flag-auto-save-files)) | |
293 (define-key dired-mode-map [menu-bar mark backup-files] | |
294 '("Flag Backup Files" . dired-flag-backup-files)) | |
295 (define-key dired-mode-map [menu-bar mark executables] | |
296 '("Mark Executables" . dired-mark-executables)) | |
297 (define-key dired-mode-map [menu-bar mark directory] | |
298 '("Mark Old Backups" . dired-clean-directory)) | |
299 (define-key dired-mode-map [menu-bar mark directories] | |
300 '("Mark Directories" . dired-mark-directories)) | |
301 (define-key dired-mode-map [menu-bar mark symlinks] | |
302 '("Mark Symlinks" . dired-mark-symlinks)) | |
303 (define-key dired-mode-map [menu-bar mark toggle] | |
304 (cons "Toggle Marks..." | |
305 (function (lambda () (interactive) | |
306 (let ((current-prefix-arg t)) | |
307 (call-interactively 'dired-change-marks)))))) | |
308 (dired-cache-key dired-mark-menu 'toggle 'dired-change-marks | |
309 'universal-argument) | |
310 (define-key dired-mode-map [menu-bar mark unmark-all] | |
311 '("Unmark All" . dired-unmark-all-files)) | |
312 (define-key dired-mode-map [menu-bar mark marks] | |
313 '("Change Marks..." . dired-change-marks)) | |
314 (define-key dired-mode-map [menu-bar mark prev] | |
315 '("Previous Marked" . dired-prev-marked-file)) | |
316 (define-key dired-mode-map [menu-bar mark next] | |
317 '("Next Marked" . dired-next-marked-file)) | |
318 | |
319 ;; Do Menu-bar Menu | |
320 | |
321 (define-key dired-mode-map [menu-bar do] | |
322 dired-do-menu) | |
323 (define-key dired-mode-map [menu-bar do do-popup] | |
324 (cons "Operate on file menu >" | |
325 'dired-do-popup-menu-internal)) | |
326 (dired-cache-key dired-do-menu 'do-popup | |
327 'dired-do-popup-menu) | |
328 (define-key dired-mode-map [menu-bar do visit-popup] | |
329 (cons "Visit file menu >" | |
330 'dired-visit-popup-menu-internal)) | |
331 (dired-cache-key dired-do-menu 'visit-popup | |
332 'dired-visit-popup-menu) | |
333 (define-key dired-mode-map [menu-bar do delete] | |
334 '("Delete Marked Files" . dired-do-delete)) | |
335 (define-key dired-mode-map [menu-bar do background-command] | |
336 '("Background Shell Command..." . dired-do-background-shell-command)) | |
337 (define-key dired-mode-map [menu-bar do command] | |
338 '("Shell Command..." . dired-do-shell-command)) | |
339 (define-key dired-mode-map [menu-bar do symlink] | |
340 '("Symlink to..." . dired-do-symlink)) | |
341 (define-key dired-mode-map [menu-bar do hardlink] | |
342 '("Hardlink to..." . dired-do-hardlink)) | |
343 (define-key dired-mode-map [menu-bar do compile] | |
344 '("Byte-compile" . dired-do-byte-compile)) | |
345 (define-key dired-mode-map [menu-bar do load] | |
346 '("Load" . dired-do-load)) | |
347 (define-key dired-mode-map [menu-bar do chgrp] | |
348 '("Change Group..." . dired-do-chgrp)) | |
349 (define-key dired-mode-map [menu-bar do chown] | |
350 '("Change Owner..." . dired-do-chown)) | |
351 (define-key dired-mode-map [menu-bar do chmod] | |
352 '("Change Mode..." . dired-do-chmod)) | |
353 (define-key dired-mode-map [menu-bar do print] | |
354 '("Print..." . dired-do-print)) | |
355 (define-key dired-mode-map [menu-bar do uucode] | |
356 '("Uuencode/Uudecode" . dired-do-uucode)) | |
357 (define-key dired-mode-map [menu-bar do compress] | |
358 '("Compress/Uncompress" . dired-do-compress)) | |
359 (define-key dired-mode-map [menu-bar do expunge] | |
360 '("Expunge File Flagged for Deletion" . dired-expunge-deletions)) | |
361 (define-key dired-mode-map [menu-bar do rename] | |
362 '("Rename to..." . dired-do-rename)) | |
363 (define-key dired-mode-map [menu-bar do copy] | |
364 '("Copy to..." . dired-do-copy)) | |
365 | |
366 ;; Regex Menu-bar Menu | |
367 | |
368 (define-key dired-mode-map [menu-bar regex] dired-regex-menu) | |
369 (define-key dired-mode-map [menu-bar regex show-omit-regexp] | |
370 (cons "Show Omit Regex" | |
371 (function | |
372 (lambda () | |
373 (interactive) | |
374 (let ((current-prefix-arg 0)) | |
375 (call-interactively 'dired-add-omit-regexp)))))) | |
376 (dired-cache-key dired-regex-menu 'show-omit-regexp | |
377 'dired-add-omit-regexp 0) | |
378 (define-key dired-mode-map [menu-bar regex remove-omit-extension] | |
379 (cons "Remove Omit Extension..." | |
380 (function | |
381 (lambda () | |
382 (interactive) | |
383 (let ((current-prefix-arg '(16))) | |
384 (call-interactively 'dired-add-omit-regexp)))))) | |
385 (dired-cache-key dired-regex-menu 'remove-omit-extension | |
386 'dired-add-omit-regexp 'universal-argument | |
387 'universal-argument) | |
388 (define-key dired-mode-map [menu-bar regex add-omit-extension] | |
389 (cons "Add Omit Extension..." | |
390 (function | |
391 (lambda () | |
392 (interactive) | |
393 (let ((current-prefix-arg '(4))) | |
394 (call-interactively 'dired-add-omit-regexp)))))) | |
395 (dired-cache-key dired-regex-menu 'add-omit-extension | |
396 'dired-add-omit-regexp 'universal-argument) | |
397 (define-key dired-mode-map [menu-bar regex remove-omit-regexp] | |
398 (cons "Remove Omit Regex..." | |
399 (function | |
400 (lambda () | |
401 (interactive) | |
402 (let ((current-prefix-arg 1)) | |
403 (call-interactively 'dired-add-omit-regexp)))))) | |
404 (dired-cache-key dired-regex-menu 'remove-omit-regexp | |
405 'dired-add-omit-regexp 1) | |
406 (define-key dired-mode-map [menu-bar regex add-omit-regexp] | |
407 '("Add Omit Regex..." . dired-add-omit-regexp)) | |
408 (define-key dired-mode-map [menu-bar regex separator] | |
409 '("--")) | |
410 (define-key dired-mode-map [menu-bar regex relsymlink] | |
411 '("Relative Symlink..." . dired-do-relsymlink-regexp)) | |
412 (define-key dired-mode-map [menu-bar regex symlink] | |
413 '("Symlink..." . dired-do-symlink-regexp)) | |
414 (define-key dired-mode-map [menu-bar regex hardlink] | |
415 '("Hardlink..." . dired-do-hardlink-regexp)) | |
416 (define-key dired-mode-map [menu-bar regex rename] | |
417 '("Rename..." . dired-do-rename-regexp)) | |
418 (define-key dired-mode-map [menu-bar regex copy] | |
419 '("Copy..." . dired-do-copy-regexp)) | |
420 (define-key dired-mode-map [menu-bar regex upcase] | |
421 '("Upcase" . dired-upcase)) | |
422 (define-key dired-mode-map [menu-bar regex downcase] | |
423 '("Downcase" . dired-downcase)) | |
424 (define-key dired-mode-map [menu-bar regex dired-flag-extension] | |
425 '("Flag Files with Extension..." . dired-flag-extension)) | |
426 (define-key dired-mode-map [menu-bar regex flag] | |
427 '("Flag..." . dired-flag-files-regexp)) | |
428 (define-key dired-mode-map [menu-bar regex mark-extension] | |
429 '("Mark Files with Extension..." . dired-mark-extension)) | |
430 (define-key dired-mode-map [menu-bar regex mark] | |
431 '("Mark..." . dired-mark-files-regexp)) | |
432 | |
433 ;; Look Menu-bar Menu | |
434 | |
435 (define-key dired-mode-map [menu-bar look] dired-look-menu) | |
436 (define-key dired-mode-map [menu-bar look patch] | |
437 '("Patch File" . dired-epatch)) | |
438 (define-key dired-mode-map [menu-bar look ediff] | |
439 '("Ediff Files..." . dired-ediff)) | |
440 (define-key dired-mode-map [menu-bar look emerge-with-ancestor] | |
441 '("Merge Files Having Common Ancestor..." . dired-emerge-with-ancestor)) | |
442 (define-key dired-mode-map [menu-bar look emerge] | |
443 '("Merge Files..." . dired-emerge)) | |
444 (define-key dired-mode-map [menu-bar look backup-diff] | |
445 '("Diff with Backup" . dired-backup-diff)) | |
446 (define-key dired-mode-map [menu-bar look diff] | |
447 '("Diff File..." . dired-diff)) | |
448 ;; Put in a separator line. | |
449 (define-key dired-mode-map [menu-bar look look-separator] | |
450 '("--")) | |
451 (define-key dired-mode-map [menu-bar look tags-query-replace] | |
452 '("Tags Query Replace..." . dired-do-tags-query-replace)) | |
453 (define-key dired-mode-map [menu-bar look tags-search] | |
454 '("Tags Search for..." . dired-do-tags-search)) | |
455 (define-key dired-mode-map [menu-bar look grep] | |
456 '("Grep for..." . dired-do-grep)) | |
457 | |
458 ;; Sort Menu-bar Menu | |
459 | |
460 (define-key dired-mode-map [menu-bar sort] dired-sort-menu) | |
461 (define-key dired-mode-map [menu-bar sort redisplay-killed] | |
462 (cons "Redisplay Killed Lines" | |
463 (function (lambda () (interactive) (dired-do-kill-file-lines 0))))) | |
464 (dired-cache-key dired-sort-menu 'redisplay-killed | |
465 'dired-do-kill-file-lines 0) | |
466 (define-key dired-mode-map [menu-bar sort kill] | |
467 '("Kill Marked Lines" . dired-do-kill-file-lines)) | |
468 (define-key dired-mode-map [menu-bar sort toggle-omit] | |
469 '("Toggle Omit" . dired-omit-toggle)) | |
470 (define-key dired-mode-map [menu-bar sort hide-subdir] | |
471 '("Hide Subdir" . dired-hide-subdir)) | |
472 (define-key dired-mode-map [menu-bar sort hide-all] | |
473 '("Hide All Subdirs" . dired-hide-all)) | |
474 (define-key dired-mode-map [menu-bar sort sort-separator] | |
475 '("--")) | |
476 (define-key dired-mode-map [menu-bar sort entire-edit] | |
477 (cons "Edit Switches for Entire Buffer..." | |
478 (function (lambda () (interactive) | |
479 (dired-sort-toggle-or-edit '(16)))))) | |
480 (dired-cache-key dired-sort-menu 'entire-edit | |
481 'dired-sort-toggle-or-edit 'universal-argument | |
482 'universal-argument) | |
483 (define-key dired-mode-map [menu-bar sort entire-name] | |
484 (cons "Sort Entire Buffer by Name" | |
485 (function (lambda () (interactive) | |
486 (dired-sort-toggle-or-edit 'name))))) | |
487 (dired-cache-key dired-sort-menu 'entire-name 'dired-sort-toggle-or-edit | |
488 'universal-argument) | |
489 (define-key dired-mode-map [menu-bar sort entire-date] | |
490 (cons "Sort Entire Buffer by Date" | |
491 (function (lambda () (interactive) | |
492 (dired-sort-toggle-or-edit 'date))))) | |
493 (dired-cache-key dired-sort-menu 'entire-date 'dired-sort-toggle-or-edit | |
494 'universal-argument) | |
495 (define-key dired-mode-map [menu-bar sort new-edit] | |
496 (cons "Edit Default Switches for Inserted Subdirs..." | |
497 (function (lambda () (interactive) (dired-sort-toggle-or-edit 2))))) | |
498 (dired-cache-key dired-sort-menu 'new-edit 'dired-sort-toggle-or-edit 2) | |
499 (define-key dired-mode-map [menu-bar sort edit] | |
500 (cons "Edit Switches for Current Subdir..." | |
501 (function (lambda () (interactive) (dired-sort-toggle-or-edit 1))))) | |
502 (dired-cache-key dired-sort-menu 'edit 'dired-sort-toggle-or-edit 1) | |
503 (define-key dired-mode-map [menu-bar sort show] | |
504 (cons "Show Current Switches" | |
505 (function (lambda () (interactive) (dired-sort-toggle-or-edit 0))))) | |
506 (dired-cache-key dired-sort-menu 'show 'dired-sort-toggle-or-edit 0) | |
507 (define-key dired-mode-map [menu-bar sort toggle] | |
508 '("Toggle Current Subdir by Name/Date" . dired-sort-toggle-or-edit)) | |
509 | |
510 ;; Help Menu-bar Menu | |
511 | |
512 (or dired-help-menu | |
513 (setq dired-help-menu | |
514 (if (and (boundp 'menu-bar-help-menu) (keymapp menu-bar-help-menu)) | |
515 (cons "Help" (cons 'keymap (cdr menu-bar-help-menu))) | |
516 (cons "Help" (make-sparse-keymap "Help"))))) | |
517 (define-key dired-mode-map [menu-bar dired-help] dired-help-menu) | |
518 (define-key dired-mode-map [menu-bar dired-help help-separator] | |
519 '("--")) | |
520 (define-key dired-mode-map [menu-bar dired-help dired-bug] | |
521 '("Report Dired Bug" . dired-report-bug)) | |
522 (define-key dired-mode-map [menu-bar dired-help dired-var-apropos] | |
523 (cons "Dired Variable Apropos" | |
524 (function (lambda () | |
525 (interactive) | |
526 (let ((current-prefix-arg t)) | |
527 (call-interactively 'dired-apropos)))))) | |
528 (dired-cache-key dired-help-menu 'dired-var-apropos | |
529 'dired-apropos 'universal-argument) | |
530 (define-key dired-mode-map [menu-bar dired-help dired-apropos] | |
531 '("Dired Command Apropos" . dired-apropos)) | |
532 (define-key dired-mode-map [menu-bar dired-help dired-info] | |
533 (cons "Dired Info Manual" | |
534 (function (lambda () | |
535 (interactive) | |
536 (dired-describe-mode t))))) | |
537 (dired-cache-key dired-help-menu 'dired-info 'dired-describe-mode | |
538 'universal-argument) | |
539 (define-key dired-mode-map [menu-bar dired-help dired-describe-mode] | |
540 '("Describe Dired" . dired-describe-mode)) | |
541 (define-key dired-mode-map [menu-bar dired-help dired-summary] | |
542 '("Dired Summary Help" . dired-summary))) | |
543 | |
544 (add-hook 'dired-setup-keys-hook 'dired-setup-menus) | |
545 | |
546 ;;; Mouse functions | |
547 | |
548 (defun dired-mouse-find-file (event) | |
549 "In dired, visit the file or directory name you click on." | |
550 (interactive "e") | |
551 (save-excursion | |
552 (set-buffer (window-buffer (posn-window (event-end event)))) | |
553 (if dired-subdir-alist | |
554 (save-excursion | |
555 (goto-char (posn-point (event-end event))) | |
556 (dired-find-file)) | |
557 (error | |
558 (concat "dired-subdir-alist seems to be mangled. " | |
559 (substitute-command-keys | |
560 "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) | |
561 | |
562 (defun dired-mouse-mark (event) | |
563 "In dired, mark the file name that you click on. | |
564 If the file name is already marked, this unmarks it." | |
565 (interactive "e") | |
566 (save-excursion | |
567 (set-buffer (window-buffer (posn-window (event-end event)))) | |
568 (if dired-subdir-alist | |
569 (save-excursion | |
570 (goto-char (posn-point (event-end event))) | |
571 (beginning-of-line) | |
572 (if (looking-at dired-re-mark) | |
573 (dired-unmark 1) | |
574 (dired-mark 1))) | |
575 (error | |
576 (concat "dired-subdir-alist seems to be mangled. " | |
577 (substitute-command-keys | |
578 "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) | |
579 | |
580 (defun dired-mouse-flag (event) | |
581 "In dired, flag for deletion the file name that you click on. | |
582 If the file name is already flag, this unflags it." | |
583 (interactive "e") | |
584 (save-excursion | |
585 (set-buffer (window-buffer (posn-window (event-end event)))) | |
586 (if dired-subdir-alist | |
587 (save-excursion | |
588 (goto-char (posn-point (event-end event))) | |
589 (beginning-of-line) | |
590 (if (char-equal (following-char) dired-del-marker) | |
591 (dired-unflag 1) | |
592 (dired-flag-file-deletion 1))) | |
593 (error | |
594 (concat "dired-subdir-alist seems to be mangled. " | |
595 (substitute-command-keys | |
596 "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) | |
597 | |
598 (defun dired-mouse-get-target (event) | |
599 "In dired, put a copy of the selected directory in the active minibuffer." | |
600 (interactive "e") | |
601 (let ((obuff (current-buffer)) | |
602 mb) | |
603 (set-buffer (window-buffer (posn-window (event-end event)))) | |
604 (if (and dired-subdir-alist (setq mb (dired-get-active-minibuffer-window))) | |
605 (let (dir) | |
606 (goto-char (posn-point (event-end event))) | |
607 (setq dir (dired-current-directory)) | |
608 (select-window mb) | |
609 (set-buffer (window-buffer mb)) | |
610 (erase-buffer) | |
611 (insert dir)) | |
612 (set-buffer obuff) | |
613 (if mb | |
614 (error "No directory specified") | |
615 (error "No active minibuffer"))))) | |
616 | |
617 (defun dired-visit-popup-menu (event) | |
618 "Popup a menu to visit the moused file." | |
619 (interactive "e") | |
620 (save-excursion | |
621 (set-buffer (window-buffer (posn-window (event-end event)))) | |
622 (save-excursion | |
623 (goto-char (posn-point (event-end event))) | |
624 (dired-visit-popup-menu-internal event)))) | |
625 | |
626 (defun dired-visit-popup-menu-internal (event) | |
627 (interactive "e") | |
628 (let ((fn (dired-get-filename 'no-dir)) | |
629 fun) | |
630 (dired-remove-text-properties 0 (length fn) fn) | |
631 (setq fun (x-popup-menu | |
632 event | |
633 (list "Visit popup menu" | |
634 (cons | |
635 (concat "Visit " fn " with") | |
636 dired-visit-popup-menu)))) | |
637 (if fun (funcall fun)))) | |
638 | |
639 (defun dired-do-popup-menu (event) | |
640 ;; Pop up a menu do an operation on the moused file. | |
641 (interactive "e") | |
642 (let ((obuff (current-buffer))) | |
643 (unwind-protect | |
644 (progn | |
645 (set-buffer (window-buffer (posn-window (event-end event)))) | |
646 (dired-save-excursion | |
647 (goto-char (posn-point (event-end event))) | |
648 (dired-do-popup-menu-internal event))) | |
649 (set-buffer obuff)))) | |
650 | |
651 (defun dired-do-popup-menu-internal (event) | |
652 (interactive "e") | |
653 (let ((fn (dired-get-filename 'no-dir)) | |
654 fun) | |
655 (dired-remove-text-properties 0 (length fn) fn) | |
656 (setq fun (x-popup-menu | |
657 event | |
658 (list "Do popup menu" | |
659 (cons | |
660 (concat "Do operation on " fn) | |
661 dired-do-popup-menu)))) | |
662 (dired-save-excursion | |
663 (if fun (let ((current-prefix-arg 1)) | |
664 (call-interactively fun)))))) | |
665 | |
666 ;;; Key maps | |
667 | |
668 ;; Get rid of the Edit menu bar item to save space. | |
669 (define-key dired-mode-map [menu-bar edit] 'undefined) | |
670 ;; We have our own help item | |
671 (define-key dired-mode-map [menu-bar help] 'undefined) | |
672 (define-key dired-mode-map [mouse-2] 'dired-mouse-find-file) | |
673 (define-key dired-mode-map [S-mouse-1] 'dired-mouse-mark) | |
674 (define-key dired-mode-map [C-S-mouse-1] 'dired-mouse-flag) | |
675 (define-key dired-mode-map [down-mouse-3] 'dired-visit-popup-menu) | |
676 ;; This can be useful in dired, so move to double click. | |
677 (define-key dired-mode-map [double-mouse-3] 'mouse-save-then-kill) | |
678 (define-key dired-mode-map [C-down-mouse-2] 'dired-do-popup-menu) | |
679 (define-key dired-mode-map [M-mouse-2] 'dired-mouse-get-target) | |
680 | |
681 (or (memq 'dired-help menu-bar-final-items) | |
682 (setq menu-bar-final-items (cons 'dired-help menu-bar-final-items))) | |
683 | |
684 ;;; end of dired-fsf.el |