0
|
1 ;;; dired-xemacs-menu.el: A menu for the dired-mode.
|
|
2 ;;; v2.90; 7 Dec 1993
|
|
3 ;;; Copyright (C) 1993 Heiko Muenkel
|
|
4 ;;; email: muenkel@tnt.uni-hannover.de
|
|
5 ;;;
|
|
6 ;;; This program is free software; you can redistribute it and/or modify
|
|
7 ;;; it under the terms of the GNU General Public License as published by
|
|
8 ;;; the Free Software Foundation; either version 1, or (at your option)
|
|
9 ;;; any later version.
|
|
10 ;;;
|
|
11 ;;; This program is distributed in the hope that it will be useful,
|
|
12 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14 ;;; GNU General Public License for more details.
|
|
15 ;;;
|
|
16 ;;; You should have received a copy of the GNU General Public License
|
|
17 ;;; along with this program; if not, write to the Free Software
|
|
18 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
19
|
|
20 (require 'mode-motion)
|
|
21
|
|
22 ;; Popup and Pulldown Menu
|
|
23
|
|
24 (defvar dired-menu
|
|
25 '("Dired Commands"
|
|
26 ["Open File" dired-find-file t]
|
|
27 ["Open File Other Window" dired-find-file-other-window t]
|
|
28 ["View File" dired-view-file t]
|
|
29 "----"
|
|
30 ("Mark"
|
|
31 ["Mark File" dired-mark-subdir-or-file t]
|
|
32 ["Mark Files in Region" dired-mark-region (mark)]
|
|
33 ["Mark Files by Regexp..." dired-mark-files-regexp t]
|
|
34 ["Mark All Directories" dired-mark-directories t]
|
|
35 ["Mark All Executables" dired-mark-executables t]
|
|
36 ["Mark All Symbolic Links" dired-mark-symlinks t]
|
|
37 "----"
|
|
38 ["Unmark File" dired-unmark-subdir-or-file t]
|
|
39 ["Unmark All Files" (dired-unflag-all-files nil) t]
|
|
40 ["Unmark All Files (Query)..." (dired-unflag-all-files nil t) t]
|
|
41 ["Unmark Files in Region" dired-unmark-region (mark)]
|
|
42 )
|
|
43 ("Copy/Link"
|
|
44 ["Copy Files..." dired-do-copy t]
|
|
45 ["Copy Files by Regexp..." dired-do-copy-regexp t]
|
|
46 "----"
|
|
47 ["Symlink Files in Directory..." dired-do-symlink t]
|
|
48 ["Symlink Files in Directory by Regexp..." dired-do-symlink-regexp t]
|
|
49 "----"
|
|
50 ["Hard-Link Files in Directory..." dired-do-hardlink t]
|
|
51 ["Hard-Link Files in Directory by Regexp..." dired-do-hardlink-regexp t]
|
|
52 )
|
|
53 ("Rename"
|
|
54 ["Rename Marked Files..." dired-do-move t]
|
|
55 ["Rename Files by Regexp..." dired-do-rename-regexp t]
|
|
56 "----"
|
|
57 ["Downcase Names of Marked Files..." dired-downcase t]
|
|
58 ["Upcase Names of Marked Files..." dired-upcase t]
|
|
59 )
|
|
60 ("Delete"
|
|
61 ["Delete Marked Files..." dired-do-delete t]
|
|
62 ["Delete Flagged Files..." dired-do-deletions t]
|
|
63 "----"
|
|
64 ["Flag Marked Files for Deletion" dired-flag-file-deleted t]
|
|
65 ["Flag Files in Region for Deletion" dired-flag-region (mark)]
|
|
66 ["Flag Files for Deletion by Regexp..." dired-flag-regexp-files t]
|
|
67 ["Flag Backup Files for Deletion" dired-clean-directory t]
|
|
68 ["Flag Autosave Files for Deletion" dired-flag-auto-save-files t]
|
|
69 "----"
|
|
70 ["Unflag Marked Files" dired-unflag t]
|
|
71 ["Unflag Backup Files" dired-backup-unflag t]
|
|
72 ["Unflag All Files" (dired-unflag-all-files nil) t]
|
|
73 ["Unflag All Files (Query)..." (dired-unflag-all-files nil) t]
|
|
74 ["Unflag Files in Region" dired-unflag-region (mark)]
|
|
75 )
|
|
76 ("Shell commands"
|
|
77 ["Compress Marked Files..." dired-do-compress t]
|
|
78 ["Uncompress Marked Files..." dired-do-uncompress t]
|
|
79 ["Print Marked Files..." dired-do-print t]
|
|
80 ["Shell Command on Marked Files..." dired-do-shell-command t]
|
|
81 "----"
|
|
82 ["Load Marked Files" dired-do-load t]
|
|
83 ["Byte-Compile Marked Files..." dired-do-byte-compile t]
|
|
84 "----"
|
|
85 ["Diff File Against Backup" dired-backup-diff t]
|
|
86 ["Diff File..." dired-diff t]
|
|
87 "----"
|
|
88 ["Change Permissions of Marked Files..." dired-do-chmod t]
|
|
89 ["Change Group of Marked Files..." dired-do-chgrp t]
|
|
90 ["Change Owner of Marked Files..." dired-do-chown t]
|
|
91 )
|
|
92 "----"
|
|
93 ("Directory"
|
|
94 ["Up Directory" dired-up-directory t]
|
|
95 ["Home Directory" (dired "~/") t]
|
|
96 "----"
|
|
97 ["Dired..." dired t]
|
|
98 ["Dired Other Window..." dired-other-window t]
|
|
99 ["Redisplay All Files" revert-buffer t]
|
|
100 "----"
|
|
101 ["Create Directory..." dired-create-directory t]
|
|
102 "----"
|
|
103 ["Insert Subdirectory" dired-insert-subdir t]
|
|
104 ["Hide Subdirectory" dired-kill-subdir t]
|
|
105 ["Hide All Subdirectories..." dired-kill-tree t]
|
|
106 )
|
|
107 ("Goto"
|
|
108 ["Next Directory Line" dired-next-dirline t]
|
|
109 ["Previous Directory Line" dired-prev-dirline t]
|
|
110 ["Next Marked File" dired-next-marked-file t]
|
|
111 ["Previous Marked File" dired-prev-marked-file t]
|
|
112 "----"
|
|
113 ["File..." dired-goto-file t]
|
|
114 ["Top of Directory..." dired-goto-subdir t]
|
|
115 ["Down Directory" dired-tree-down t]
|
|
116 ["Up Directory" dired-tree-up t]
|
|
117 )
|
|
118 ("Display"
|
|
119 ["Undisplay Line or Subdirectory" dired-kill-line-or-subdir t]
|
|
120 ["Undisplay Tree" dired-kill-tree t]
|
|
121 ["Undisplay Marked Lines" dired-do-kill t]
|
|
122 "----"
|
|
123 ["Redisplay All Files" revert-buffer t]
|
|
124 ["Redisplay All Marked Files" dired-do-redisplay t]
|
|
125 ["Undo" dired-undo t]
|
|
126 "----"
|
|
127 ["Sort by Date/Name (Toggle)" dired-sort-toggle-or-edit t]
|
|
128 ["Edit `ls' Switches..." (dired-sort-toggle-or-edit t) t]
|
|
129 )
|
|
130 "----"
|
|
131 ("Options, This Buffer"
|
|
132 ["Action is find-file" (set (make-local-variable 'dired-mouse-action)
|
|
133 'dired-mouse-find-file)
|
|
134 :style radio
|
|
135 :selected (eq dired-mouse-action 'dired-mouse-find-file)]
|
|
136 ["Action is find-file-other-window"
|
|
137 (set (make-local-variable 'dired-mouse-action)
|
|
138 'dired-mouse-find-file-other-window)
|
|
139 :style radio
|
|
140 :selected (eq dired-mouse-action 'dired-mouse-find-file-other-window)])
|
|
141 ("Options, Global"
|
|
142 ["Action is find-file" (setq-default dired-mouse-action
|
|
143 'dired-mouse-find-file)
|
|
144 :style radio
|
|
145 :selected (eq (default-value 'dired-mouse-action)
|
|
146 'dired-mouse-find-file)]
|
|
147 ["Action is find-file-other-window"
|
|
148 (setq-default dired-mouse-action 'dired-mouse-find-file-other-window)
|
|
149 :style radio
|
|
150 :selected (eq (default-value 'dired-mouse-action)
|
|
151 'dired-mouse-find-file-other-window)])
|
|
152 "----"
|
|
153 ["Explain Last Failure" dired-why t]
|
|
154 )
|
|
155 "*The menu for Dired.")
|
|
156
|
|
157 (defun dired-mouse-file-on-line-p (event)
|
|
158 "Return t if there is a file under the mouse."
|
|
159 (interactive "@e")
|
|
160 (save-excursion
|
|
161 (mouse-set-point event)
|
|
162 (if (dired-move-to-filename)
|
|
163 t
|
|
164 nil)))
|
|
165
|
|
166 (defun dired-mode-motion-highlight-line (event)
|
|
167 (if (dired-mouse-file-on-line-p event)
|
|
168 (mode-motion-highlight-line event)))
|
|
169
|
|
170 (defun dired-install-menubar ()
|
|
171 "Installs the Dired menu at the menubar."
|
|
172 (if (and (boundp 'current-menubar) current-menubar
|
|
173 (not (assoc "Dired" current-menubar)))
|
|
174 (progn
|
|
175 (set-buffer-menubar (copy-sequence current-menubar))
|
|
176 (add-menu nil "Dired" (cdr dired-menu))))
|
|
177 (make-local-variable 'mode-motion-hook)
|
|
178 (setq mode-motion-hook '(dired-mode-motion-highlight-line
|
|
179 mode-motion-add-help-echo))
|
|
180 ;; #### double-click left is supposed to work but it doesn't.
|
|
181 ;; I'm not sure why.
|
|
182 (setq mode-motion-help-echo-string
|
|
183 "Middle button to select file under mouse.")
|
|
184 )
|
|
185 (add-hook 'dired-mode-hook 'dired-install-menubar)
|
|
186
|
|
187 (defun dired-popup-menu (event)
|
|
188 "Display the Dired Menu."
|
|
189 (interactive "@e")
|
|
190 (mouse-set-point event)
|
|
191 (dired-next-line 0)
|
|
192 (popup-menu dired-menu))
|
|
193
|
|
194 (defun dired-mouse-find-file (event)
|
|
195 "Edit the file under the mouse."
|
|
196 (interactive "e")
|
|
197 (mouse-set-point event)
|
|
198 (dired-next-line 0)
|
|
199 (dired-find-file))
|
|
200
|
|
201 (defun dired-mouse-find-file-other-window (event)
|
|
202 "Edit the file under the mouse, in another window."
|
|
203 (interactive "e")
|
|
204 (mouse-set-point event)
|
|
205 (dired-next-line 0)
|
|
206 (dired-find-file-other-window))
|
|
207
|
|
208 (defvar dired-mouse-action 'dired-mouse-find-file
|
|
209 "*Function to be called when button2 is clicked on a file in Dired.")
|
|
210
|
|
211 (defun dired-mouse-do-action (event)
|
|
212 (interactive "e")
|
|
213 (funcall dired-mouse-action event))
|
|
214
|
|
215 (defun dired-mark-region (&optional form-to-eval)
|
|
216 "Mark all files in the region."
|
|
217 (interactive)
|
|
218 (or form-to-eval (setq form-to-eval '(dired-mark-subdir-or-file nil)))
|
|
219 (save-excursion
|
|
220 (let ((end (region-end)))
|
|
221 (goto-char (region-beginning))
|
|
222 (beginning-of-line)
|
|
223 (while (<= (point) end)
|
|
224 (save-excursion (eval form-to-eval))
|
|
225 (forward-line 1)))))
|
|
226
|
|
227 (defun dired-unmark-region ()
|
|
228 "Unmark all files in the region."
|
|
229 (interactive)
|
|
230 (dired-mark-region '(dired-unmark-subdir-or-file nil)))
|
|
231
|
|
232 (defun dired-flag-region ()
|
|
233 "Flag all files in the region for deletion."
|
|
234 (interactive)
|
|
235 (dired-mark-region '(dired-flag-file-deleted nil)))
|
|
236
|
|
237 (defun dired-unflag-region ()
|
|
238 "Unflag all files in the region for deletion."
|
|
239 (interactive)
|
|
240 (dired-mark-region '(dired-unflag 1)))
|
|
241
|
|
242
|
|
243 (define-key dired-mode-map 'button2 'dired-mouse-do-action)
|
|
244 (define-key dired-mode-map 'button3 'dired-popup-menu)
|
|
245
|
|
246
|
|
247 (provide 'dired-xemacs-menu)
|