Mercurial > emacs
comparison lisp/menu-bar.el @ 88155:d7ddb3e565de
sync with trunk
author | Henrik Enberg <henrik.enberg@telia.com> |
---|---|
date | Mon, 16 Jan 2006 00:03:54 +0000 |
parents | e88404e8f2cf |
children |
comparison
equal
deleted
inserted
replaced
88154:8ce476d3ba36 | 88155:d7ddb3e565de |
---|---|
1 ;;; menu-bar.el --- define a default menu bar | 1 ;;; menu-bar.el --- define a default menu bar |
2 | 2 |
3 ;; Copyright (C) 1993, 1994, 1995, 2000, 2001, 2002 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1993, 1994, 1995, 2000, 2001, 2002, 2003, 2004, |
4 ;; 2005 Free Software Foundation, Inc. | |
4 | 5 |
5 ;; Author: RMS | 6 ;; Author: RMS |
6 ;; Maintainer: FSF | 7 ;; Maintainer: FSF |
7 ;; Keywords: internal, mouse | 8 ;; Keywords: internal, mouse |
8 | 9 |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19 ;; GNU General Public License for more details. | 20 ;; GNU General Public License for more details. |
20 | 21 |
21 ;; You should have received a copy of the GNU General Public License | 22 ;; You should have received a copy of the GNU General Public License |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02111-1307, USA. | 25 ;; Boston, MA 02110-1301, USA. |
25 | 26 |
26 ;; Avishai Yacobi suggested some menu rearrangements. | 27 ;; Avishai Yacobi suggested some menu rearrangements. |
27 | 28 |
28 ;;; Commentary: | 29 ;;; Commentary: |
29 | 30 |
61 (defvar menu-bar-options-menu (make-sparse-keymap "Options")) | 62 (defvar menu-bar-options-menu (make-sparse-keymap "Options")) |
62 (define-key global-map [menu-bar options] | 63 (define-key global-map [menu-bar options] |
63 (cons "Options" menu-bar-options-menu)) | 64 (cons "Options" menu-bar-options-menu)) |
64 (defvar menu-bar-edit-menu (make-sparse-keymap "Edit")) | 65 (defvar menu-bar-edit-menu (make-sparse-keymap "Edit")) |
65 (define-key global-map [menu-bar edit] (cons "Edit" menu-bar-edit-menu)) | 66 (define-key global-map [menu-bar edit] (cons "Edit" menu-bar-edit-menu)) |
66 (defvar menu-bar-files-menu (make-sparse-keymap "File")) | 67 (defvar menu-bar-file-menu (make-sparse-keymap "File")) |
67 (define-key global-map [menu-bar files] (cons "File" menu-bar-files-menu)) | 68 (define-key global-map [menu-bar file] (cons "File" menu-bar-file-menu)) |
68 | 69 |
69 ;; This alias is for compatibility with 19.28 and before. | 70 ;; This alias is for compatibility with 19.28 and before. |
70 (defvar menu-bar-file-menu menu-bar-files-menu) | 71 (defvar menu-bar-files-menu menu-bar-file-menu) |
71 | 72 |
72 ;; This is referenced by some code below; it is defined in uniquify.el | 73 ;; This is referenced by some code below; it is defined in uniquify.el |
73 (defvar uniquify-buffer-name-style) | 74 (defvar uniquify-buffer-name-style) |
74 | 75 |
75 | 76 |
76 ;; The "File" menu items | 77 ;; The "File" menu items |
77 (define-key menu-bar-files-menu [exit-emacs] | 78 (define-key menu-bar-file-menu [exit-emacs] |
78 '(menu-item "Exit Emacs" save-buffers-kill-emacs | 79 '(menu-item "Exit Emacs" save-buffers-kill-emacs |
79 :help "Save unsaved buffers, then exit")) | 80 :help "Save unsaved buffers, then exit")) |
80 | 81 |
81 (define-key menu-bar-files-menu [separator-exit] | 82 (define-key menu-bar-file-menu [separator-exit] |
82 '("--")) | 83 '("--")) |
83 | 84 |
84 ;; Don't use delete-frame as event name because that is a special | 85 ;; Don't use delete-frame as event name because that is a special |
85 ;; event. | 86 ;; event. |
86 (define-key menu-bar-files-menu [delete-this-frame] | 87 (define-key menu-bar-file-menu [delete-this-frame] |
87 '(menu-item "Delete Frame" delete-frame | 88 '(menu-item "Delete Frame" delete-frame |
88 :visible (fboundp 'delete-frame) | 89 :visible (fboundp 'delete-frame) |
89 :enable (delete-frame-enabled-p) | 90 :enable (delete-frame-enabled-p) |
90 :help "Delete currently selected frame")) | 91 :help "Delete currently selected frame")) |
91 (define-key menu-bar-files-menu [make-frame-on-display] | 92 (define-key menu-bar-file-menu [make-frame-on-display] |
92 '(menu-item "New Frame on Display..." make-frame-on-display | 93 '(menu-item "New Frame on Display..." make-frame-on-display |
93 :visible (fboundp 'make-frame-on-display) | 94 :visible (fboundp 'make-frame-on-display) |
94 :help "Open a new frame on another display")) | 95 :help "Open a new frame on another display")) |
95 (define-key menu-bar-files-menu [make-frame] | 96 (define-key menu-bar-file-menu [make-frame] |
96 '(menu-item "New Frame" make-frame-command | 97 '(menu-item "New Frame" make-frame-command |
97 :visible (fboundp 'make-frame-command) | 98 :visible (fboundp 'make-frame-command) |
98 :help "Open a new frame")) | 99 :help "Open a new frame")) |
99 | 100 |
100 (define-key menu-bar-files-menu [one-window] | 101 (define-key menu-bar-file-menu [one-window] |
101 '(menu-item "Unsplit Windows" delete-other-windows | 102 '(menu-item "Remove Splits" delete-other-windows |
102 :enable (not (one-window-p t nil)) | 103 :enable (not (one-window-p t nil)) |
103 :help "Make selected window fill its frame")) | 104 :help "Selected window grows to fill the whole frame")) |
104 | 105 |
105 (define-key menu-bar-files-menu [split-window] | 106 (define-key menu-bar-file-menu [split-window] |
106 '(menu-item "Split Window" split-window-vertically | 107 '(menu-item "Split Window" split-window-vertically |
107 :help "Split selected window in two")) | 108 :enable (and (menu-bar-menu-frame-live-and-visible-p) |
108 | 109 (menu-bar-non-minibuffer-window-p)) |
109 (define-key menu-bar-files-menu [separator-window] | 110 :help "Split selected window in two windows")) |
111 | |
112 (define-key menu-bar-file-menu [separator-window] | |
110 '(menu-item "--")) | 113 '(menu-item "--")) |
111 | 114 |
112 (define-key menu-bar-files-menu [ps-print-region] | 115 (define-key menu-bar-file-menu [ps-print-region] |
113 '(menu-item "Postscript Print Region (B+W)" ps-print-region | 116 '(menu-item "Postscript Print Region (B+W)" ps-print-region |
114 :enable mark-active | 117 :enable mark-active |
115 :help "Pretty-print marked region in black and white to PostScript printer")) | 118 :help "Pretty-print marked region in black and white to PostScript printer")) |
116 (define-key menu-bar-files-menu [ps-print-buffer] | 119 (define-key menu-bar-file-menu [ps-print-buffer] |
117 '(menu-item "Postscript Print Buffer (B+W)" ps-print-buffer | 120 '(menu-item "Postscript Print Buffer (B+W)" ps-print-buffer |
121 :enable (menu-bar-menu-frame-live-and-visible-p) | |
118 :help "Pretty-print current buffer in black and white to PostScript printer")) | 122 :help "Pretty-print current buffer in black and white to PostScript printer")) |
119 (define-key menu-bar-files-menu [ps-print-region-faces] | 123 (define-key menu-bar-file-menu [ps-print-region-faces] |
120 '(menu-item "Postscript Print Region" ps-print-region-with-faces | 124 '(menu-item "Postscript Print Region" ps-print-region-with-faces |
121 :enable mark-active | 125 :enable mark-active |
122 :help "Pretty-print marked region to PostScript printer")) | 126 :help "Pretty-print marked region to PostScript printer")) |
123 (define-key menu-bar-files-menu [ps-print-buffer-faces] | 127 (define-key menu-bar-file-menu [ps-print-buffer-faces] |
124 '(menu-item "Postscript Print Buffer" ps-print-buffer-with-faces | 128 '(menu-item "Postscript Print Buffer" ps-print-buffer-with-faces |
129 :enable (menu-bar-menu-frame-live-and-visible-p) | |
125 :help "Pretty-print current buffer to PostScript printer")) | 130 :help "Pretty-print current buffer to PostScript printer")) |
126 (define-key menu-bar-files-menu [print-region] | 131 (define-key menu-bar-file-menu [print-region] |
127 '(menu-item "Print Region" print-region | 132 '(menu-item "Print Region" print-region |
128 :enable mark-active | 133 :enable mark-active |
129 :help "Print region between mark and current position")) | 134 :help "Print region between mark and current position")) |
130 (define-key menu-bar-files-menu [print-buffer] | 135 (define-key menu-bar-file-menu [print-buffer] |
131 '(menu-item "Print Buffer" print-buffer | 136 '(menu-item "Print Buffer" print-buffer |
137 :enable (menu-bar-menu-frame-live-and-visible-p) | |
132 :help "Print current buffer with page headings")) | 138 :help "Print current buffer with page headings")) |
133 | 139 |
134 (define-key menu-bar-files-menu [separator-print] | 140 (define-key menu-bar-file-menu [separator-print] |
135 '(menu-item "--")) | 141 '(menu-item "--")) |
136 | 142 |
137 (define-key menu-bar-files-menu [recover-session] | 143 (define-key menu-bar-file-menu [recover-session] |
138 '(menu-item "Recover Crashed Session..." recover-session | 144 '(menu-item "Recover Crashed Session" recover-session |
139 :enable (and auto-save-list-file-prefix | 145 :enable (and auto-save-list-file-prefix |
140 (file-directory-p | 146 (file-directory-p |
141 (file-name-directory auto-save-list-file-prefix)) | 147 (file-name-directory auto-save-list-file-prefix)) |
142 (directory-files | 148 (directory-files |
143 (file-name-directory auto-save-list-file-prefix) | 149 (file-name-directory auto-save-list-file-prefix) |
146 (regexp-quote | 152 (regexp-quote |
147 (file-name-nondirectory | 153 (file-name-nondirectory |
148 auto-save-list-file-prefix))) | 154 auto-save-list-file-prefix))) |
149 t)) | 155 t)) |
150 :help "Recover edits from a crashed session")) | 156 :help "Recover edits from a crashed session")) |
151 (define-key menu-bar-files-menu [revert-buffer] | 157 (define-key menu-bar-file-menu [revert-buffer] |
152 '(menu-item "Revert Buffer" revert-buffer | 158 '(menu-item "Revert Buffer" revert-buffer |
153 :enable (or revert-buffer-function | 159 :enable (or revert-buffer-function |
154 revert-buffer-insert-file-contents-function | 160 revert-buffer-insert-file-contents-function |
155 (and (buffer-file-name) | 161 (and buffer-file-number |
156 (or (buffer-modified-p) | 162 (or (buffer-modified-p) |
157 (not (verify-visited-file-modtime | 163 (not (verify-visited-file-modtime |
158 (current-buffer)))))) | 164 (current-buffer)))))) |
159 :help "Re-read current buffer from its file")) | 165 :help "Re-read current buffer from its file")) |
160 (define-key menu-bar-files-menu [write-file] | 166 (define-key menu-bar-file-menu [write-file] |
161 '(menu-item "Save Buffer As..." write-file | 167 '(menu-item "Save As..." write-file |
162 :enable (not (window-minibuffer-p | 168 :enable (and (menu-bar-menu-frame-live-and-visible-p) |
163 (frame-selected-window menu-updating-frame))) | 169 (menu-bar-non-minibuffer-window-p)) |
164 :help "Write current buffer to another file")) | 170 :help "Write current buffer to another file")) |
165 (define-key menu-bar-files-menu [save-buffer] | 171 (define-key menu-bar-file-menu [save-buffer] |
166 '(menu-item "Save (current buffer)" save-buffer | 172 '(menu-item "Save" save-buffer |
167 :enable (and (buffer-modified-p) | 173 :enable (and (buffer-modified-p) |
168 (buffer-file-name) | 174 (buffer-file-name) |
169 (not (window-minibuffer-p | 175 (menu-bar-non-minibuffer-window-p)) |
170 (frame-selected-window menu-updating-frame)))) | |
171 :help "Save current buffer to its file")) | 176 :help "Save current buffer to its file")) |
172 | 177 |
173 (define-key menu-bar-files-menu [separator-save] | 178 (define-key menu-bar-file-menu [separator-save] |
174 '(menu-item "--")) | 179 '(menu-item "--")) |
175 | 180 |
176 (define-key menu-bar-files-menu [kill-buffer] | 181 (defun menu-find-file-existing () |
177 '(menu-item "Close (current buffer)" kill-this-buffer | 182 "Edit the existing file FILENAME." |
183 (interactive) | |
184 (let* ((mustmatch (not (and (fboundp 'x-uses-old-gtk-dialog) | |
185 (x-uses-old-gtk-dialog)))) | |
186 (filename (car (find-file-read-args "Find file: " mustmatch)))) | |
187 (if mustmatch | |
188 (find-file-existing filename) | |
189 (find-file filename)))) | |
190 | |
191 | |
192 (define-key menu-bar-file-menu [kill-buffer] | |
193 '(menu-item "Close" kill-this-buffer | |
178 :enable (kill-this-buffer-enabled-p) | 194 :enable (kill-this-buffer-enabled-p) |
179 :help "Discard current buffer")) | 195 :help "Discard (kill) current buffer")) |
180 (define-key menu-bar-files-menu [insert-file] | 196 (define-key menu-bar-file-menu [insert-file] |
181 '(menu-item "Insert File..." insert-file | 197 '(menu-item "Insert File..." insert-file |
182 :enable (not (window-minibuffer-p | 198 :enable (menu-bar-non-minibuffer-window-p) |
183 (frame-selected-window menu-updating-frame))) | |
184 :help "Insert another file into current buffer")) | 199 :help "Insert another file into current buffer")) |
185 (define-key menu-bar-files-menu [dired] | 200 (define-key menu-bar-file-menu [dired] |
186 '(menu-item "Open Directory..." dired | 201 '(menu-item "Open Directory..." dired |
187 :help "Read a directory, operate on its files")) | 202 :enable (menu-bar-non-minibuffer-window-p) |
188 (define-key menu-bar-files-menu [open-file] | 203 :help "Read a directory, to operate on its files")) |
189 '(menu-item "Open File..." find-file | 204 (define-key menu-bar-file-menu [open-file] |
190 :enable (not (window-minibuffer-p | 205 '(menu-item "Open File..." menu-find-file-existing |
191 (frame-selected-window menu-updating-frame))) | 206 :enable (menu-bar-non-minibuffer-window-p) |
192 :help "Read a file into an Emacs buffer")) | 207 :help "Read an existing file into an Emacs buffer")) |
208 (define-key menu-bar-file-menu [new-file] | |
209 '(menu-item "Visit New File..." find-file | |
210 :enable (menu-bar-non-minibuffer-window-p) | |
211 :help "Specify a new file's name, to edit the file")) | |
193 | 212 |
194 | 213 |
195 ;; The "Edit" menu items | 214 ;; The "Edit" menu items |
196 | 215 |
197 ;; The "Edit->Search" submenu | 216 ;; The "Edit->Search" submenu |
288 | 307 |
289 (define-key menu-bar-search-menu [tags-continue] | 308 (define-key menu-bar-search-menu [tags-continue] |
290 '(menu-item "Continue Tags Search" tags-loop-continue | 309 '(menu-item "Continue Tags Search" tags-loop-continue |
291 :help "Continue last tags search operation")) | 310 :help "Continue last tags search operation")) |
292 (define-key menu-bar-search-menu [tags-srch] | 311 (define-key menu-bar-search-menu [tags-srch] |
293 '(menu-item "Search tagged files" tags-search | 312 '(menu-item "Search tagged files..." tags-search |
294 :help "Search for a regexp in all tagged files")) | 313 :help "Search for a regexp in all tagged files")) |
295 (define-key menu-bar-search-menu [separator-tag-search] | 314 (define-key menu-bar-search-menu [separator-tag-search] |
296 '(menu-item "--")) | 315 '(menu-item "--")) |
297 | 316 |
298 (define-key menu-bar-search-menu [repeat-search-back] | 317 (define-key menu-bar-search-menu [repeat-search-back] |
332 | 351 |
333 (define-key menu-bar-replace-menu [tags-repl-continue] | 352 (define-key menu-bar-replace-menu [tags-repl-continue] |
334 '(menu-item "Continue Replace" tags-loop-continue | 353 '(menu-item "Continue Replace" tags-loop-continue |
335 :help "Continue last tags replace operation")) | 354 :help "Continue last tags replace operation")) |
336 (define-key menu-bar-replace-menu [tags-repl] | 355 (define-key menu-bar-replace-menu [tags-repl] |
337 '(menu-item "Replace in tagged files" tags-query-replace | 356 '(menu-item "Replace in tagged files..." tags-query-replace |
338 :help "Interactively replace a regexp in all tagged files")) | 357 :help "Interactively replace a regexp in all tagged files")) |
339 (define-key menu-bar-replace-menu [separator-replace-tags] | 358 (define-key menu-bar-replace-menu [separator-replace-tags] |
340 '(menu-item "--")) | 359 '(menu-item "--")) |
341 | 360 |
342 (define-key menu-bar-replace-menu [query-replace-regexp] | 361 (define-key menu-bar-replace-menu [query-replace-regexp] |
367 :help "Record positions and jump between them")) | 386 :help "Record positions and jump between them")) |
368 | 387 |
369 (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) | 388 (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) |
370 | 389 |
371 (define-key menu-bar-goto-menu [set-tags-name] | 390 (define-key menu-bar-goto-menu [set-tags-name] |
372 '(menu-item "Set Tags File Name" visit-tags-table | 391 '(menu-item "Set Tags File Name..." visit-tags-table |
373 :help "Tell Tags commands which tag table file to use")) | 392 :help "Tell Tags commands which tag table file to use")) |
374 | 393 |
375 (define-key menu-bar-goto-menu [separator-tag-file] | 394 (define-key menu-bar-goto-menu [separator-tag-file] |
376 '(menu-item "--")) | 395 '(menu-item "--")) |
377 | 396 |
378 (define-key menu-bar-goto-menu [apropos-tags] | 397 (define-key menu-bar-goto-menu [apropos-tags] |
379 '(menu-item "Tags Apropos" tags-apropos | 398 '(menu-item "Tags Apropos..." tags-apropos |
380 :help "Find function/variables whose names match regexp")) | 399 :help "Find function/variables whose names match regexp")) |
381 (define-key menu-bar-goto-menu [next-tag-otherw] | 400 (define-key menu-bar-goto-menu [next-tag-otherw] |
382 '(menu-item "Next Tag in Other Window" | 401 '(menu-item "Next Tag in Other Window" |
383 menu-bar-next-tag-other-window | 402 menu-bar-next-tag-other-window |
384 :enable (and (boundp 'tags-location-ring) | 403 :enable (and (boundp 'tags-location-ring) |
471 (define-key menu-bar-edit-menu [undo] | 490 (define-key menu-bar-edit-menu [undo] |
472 '(menu-item "Undo" undo | 491 '(menu-item "Undo" undo |
473 :enable (and (not buffer-read-only) | 492 :enable (and (not buffer-read-only) |
474 (not (eq t buffer-undo-list)) | 493 (not (eq t buffer-undo-list)) |
475 (if (eq last-command 'undo) | 494 (if (eq last-command 'undo) |
476 pending-undo-list | 495 (listp pending-undo-list) |
477 (consp buffer-undo-list))) | 496 (consp buffer-undo-list))) |
478 :help "Undo last operation")) | 497 :help "Undo last operation")) |
479 | 498 |
480 | 499 |
481 (defun menu-bar-kill-ring-save (beg end) | 500 (defun menu-bar-kill-ring-save (beg end) |
482 (interactive "r") | 501 (interactive "r") |
483 (if (mouse-region-match) | 502 (if (mouse-region-match) |
484 (message "Selecting a region with the mouse does `copy' automatically") | 503 (message "Selecting a region with the mouse does `copy' automatically") |
485 (kill-ring-save beg end))) | 504 (kill-ring-save beg end))) |
486 | |
487 (autoload 'ispell-menu-map "ispell" nil t 'keymap) | |
488 | 505 |
489 ;; These are alternative definitions for the cut, paste and copy | 506 ;; These are alternative definitions for the cut, paste and copy |
490 ;; menu items. Use them if your system expects these to use the clipboard. | 507 ;; menu items. Use them if your system expects these to use the clipboard. |
491 | 508 |
492 (put 'clipboard-kill-region 'menu-enable 'mark-active) | 509 (put 'clipboard-kill-region 'menu-enable 'mark-active) |
526 'clipboard-kill-ring-save))) | 543 'clipboard-kill-ring-save))) |
527 (define-key menu-bar-edit-menu [cut] | 544 (define-key menu-bar-edit-menu [cut] |
528 (cons "Cut" (cons "Delete text in region and copy it to the clipboard" | 545 (cons "Cut" (cons "Delete text in region and copy it to the clipboard" |
529 'clipboard-kill-region))) | 546 'clipboard-kill-region))) |
530 | 547 |
548 ;; These are Sun server keysyms for the Cut, Copy and Paste keys | |
549 ;; (also for XFree86 on Sun keyboard): | |
531 (define-key global-map [f20] 'clipboard-kill-region) | 550 (define-key global-map [f20] 'clipboard-kill-region) |
532 (define-key global-map [f16] 'clipboard-kill-ring-save) | 551 (define-key global-map [f16] 'clipboard-kill-ring-save) |
533 (define-key global-map [f18] 'clipboard-yank) | 552 (define-key global-map [f18] 'clipboard-yank) |
534 ;; X11R6 versions | 553 ;; X11R6 versions: |
535 (define-key global-map [cut] 'clipboard-kill-region) | 554 (define-key global-map [cut] 'clipboard-kill-region) |
536 (define-key global-map [copy] 'clipboard-kill-ring-save) | 555 (define-key global-map [copy] 'clipboard-kill-ring-save) |
537 (define-key global-map [paste] 'clipboard-yank)) | 556 (define-key global-map [paste] 'clipboard-yank)) |
538 | 557 |
539 ;; The "Options" menu items | 558 ;; The "Options" menu items |
583 ;(defvar menu-bar-preferences-menu (make-sparse-keymap "Preferences")) | 602 ;(defvar menu-bar-preferences-menu (make-sparse-keymap "Preferences")) |
584 | 603 |
585 (defmacro menu-bar-make-mm-toggle (fname doc help &optional props) | 604 (defmacro menu-bar-make-mm-toggle (fname doc help &optional props) |
586 "Make a menu-item for a global minor mode toggle. | 605 "Make a menu-item for a global minor mode toggle. |
587 FNAME is the minor mode's name (variable and function). | 606 FNAME is the minor mode's name (variable and function). |
588 DOC is the text to use the menu entry. | 607 DOC is the text to use for the menu entry. |
589 HELP is the text to use for the tooltip. | 608 HELP is the text to use for the tooltip. |
590 PROPS are additional properties." | 609 PROPS are additional properties." |
591 `'(menu-item ,doc ,fname | 610 `'(menu-item ,doc ,fname |
592 ,@(if props props) | 611 ,@props |
593 :help ,help | 612 :help ,help |
594 :button (:toggle . (and (default-boundp ',fname) | 613 :button (:toggle . (and (default-boundp ',fname) |
595 (default-value ',fname))))) | 614 (default-value ',fname))))) |
596 | 615 |
597 (defmacro menu-bar-make-toggle (name variable doc message help &rest body) | 616 (defmacro menu-bar-make-toggle (name variable doc message help &rest body) |
598 `(progn | 617 `(progn |
599 (defun ,name () | 618 (defun ,name (&optional interactively) |
600 ,(concat "Toggle whether to " (downcase (substring help 0 1)) | 619 ,(concat "Toggle whether to " (downcase (substring help 0 1)) |
601 (substring help 1) ".") | 620 (substring help 1) ". |
602 (interactive) | 621 In an interactive call, record this option as a candidate for saving |
622 by \"Save Options\" in Custom buffers.") | |
623 (interactive "p") | |
603 (if ,(if body `(progn . ,body) | 624 (if ,(if body `(progn . ,body) |
604 `(progn | 625 `(progn |
605 (custom-load-symbol ',variable) | 626 (custom-load-symbol ',variable) |
606 (let ((set (or (get ',variable 'custom-set) 'set-default)) | 627 (let ((set (or (get ',variable 'custom-set) 'set-default)) |
607 (get (or (get ',variable 'custom-get) 'default-value))) | 628 (get (or (get ',variable 'custom-get) 'default-value))) |
610 (message ,message "disabled")) | 631 (message ,message "disabled")) |
611 ;; The function `customize-mark-as-set' must only be called when | 632 ;; The function `customize-mark-as-set' must only be called when |
612 ;; a variable is set interactively, as the purpose is to mark it as | 633 ;; a variable is set interactively, as the purpose is to mark it as |
613 ;; a candidate for "Save Options", and we do not want to save options | 634 ;; a candidate for "Save Options", and we do not want to save options |
614 ;; the user have already set explicitly in his init file. | 635 ;; the user have already set explicitly in his init file. |
615 (if (interactive-p) (customize-mark-as-set ',variable))) | 636 (if interactively (customize-mark-as-set ',variable))) |
616 '(menu-item ,doc ,name | 637 '(menu-item ,doc ,name |
617 :help ,help | 638 :help ,help |
618 :button (:toggle . (and (default-boundp ',variable) | 639 :button (:toggle . (and (default-boundp ',variable) |
619 (default-value ',variable)))))) | 640 (default-value ',variable)))))) |
620 | 641 |
625 | 646 |
626 (defun menu-bar-options-save () | 647 (defun menu-bar-options-save () |
627 "Save current values of Options menu items using Custom." | 648 "Save current values of Options menu items using Custom." |
628 (interactive) | 649 (interactive) |
629 (let ((need-save nil)) | 650 (let ((need-save nil)) |
651 ;; These are set with menu-bar-make-mm-toggle, which does not | |
652 ;; put on a customized-value property. | |
653 (dolist (elt '(line-number-mode column-number-mode size-indication-mode | |
654 cua-mode show-paren-mode transient-mark-mode | |
655 blink-cursor-mode display-time-mode display-battery-mode)) | |
656 (and (customize-mark-to-save elt) | |
657 (setq need-save t))) | |
630 ;; These are set with `customize-set-variable'. | 658 ;; These are set with `customize-set-variable'. |
631 (dolist (elt '(line-number-mode column-number-mode scroll-bar-mode | 659 (dolist (elt '(scroll-bar-mode |
632 debug-on-quit debug-on-error menu-bar-mode tool-bar-mode | 660 debug-on-quit debug-on-error |
661 tooltip-mode menu-bar-mode tool-bar-mode | |
633 save-place uniquify-buffer-name-style fringe-mode | 662 save-place uniquify-buffer-name-style fringe-mode |
634 case-fold-search cua-mode show-paren-mode | 663 indicate-empty-lines indicate-buffer-boundaries |
635 transient-mark-mode global-font-lock-mode | 664 case-fold-search |
636 display-time-mode auto-compression-mode | |
637 current-language-environment default-input-method | 665 current-language-environment default-input-method |
638 ;; Saving `text-mode-hook' is somewhat questionable, | 666 ;; Saving `text-mode-hook' is somewhat questionable, |
639 ;; as we might get more than we bargain for, if | 667 ;; as we might get more than we bargain for, if |
640 ;; other code may has added hooks as well. | 668 ;; other code may has added hooks as well. |
641 ;; Nonetheless, not saving it would like be confuse | 669 ;; Nonetheless, not saving it would like be confuse |
654 :help "Save options set from the menu above")) | 682 :help "Save options set from the menu above")) |
655 | 683 |
656 (define-key menu-bar-options-menu [custom-separator] | 684 (define-key menu-bar-options-menu [custom-separator] |
657 '("--")) | 685 '("--")) |
658 | 686 |
687 (define-key menu-bar-options-menu [mouse-set-font] | |
688 '(menu-item "Set Font/Fontset..." mouse-set-font | |
689 :visible (display-multi-font-p) | |
690 :help "Select a font from list of known fonts/fontsets")) | |
691 | |
659 ;; The "Show/Hide" submenu of menu "Options" | 692 ;; The "Show/Hide" submenu of menu "Options" |
660 | 693 |
661 (defvar menu-bar-showhide-menu (make-sparse-keymap "Show/Hide")) | 694 (defvar menu-bar-showhide-menu (make-sparse-keymap "Show/Hide")) |
662 | 695 |
663 (define-key menu-bar-showhide-menu [column-number-mode] | 696 (define-key menu-bar-showhide-menu [column-number-mode] |
664 (menu-bar-make-mm-toggle column-number-mode | 697 (menu-bar-make-mm-toggle column-number-mode |
665 "Show Column Numbers" | 698 "Column Numbers" |
666 "Show the current column number in the mode line")) | 699 "Show the current column number in the mode line")) |
667 | 700 |
668 (define-key menu-bar-showhide-menu [line-number-mode] | 701 (define-key menu-bar-showhide-menu [line-number-mode] |
669 (menu-bar-make-mm-toggle line-number-mode | 702 (menu-bar-make-mm-toggle line-number-mode |
670 "Show Line Numbers" | 703 "Line Numbers" |
671 "Show the current line number in the mode line")) | 704 "Show the current line number in the mode line")) |
672 | 705 |
706 (define-key menu-bar-showhide-menu [size-indication-mode] | |
707 (menu-bar-make-mm-toggle size-indication-mode | |
708 "Size Indication" | |
709 "Show the size of the buffer in the mode line")) | |
710 | |
673 (define-key menu-bar-showhide-menu [linecolumn-separator] | 711 (define-key menu-bar-showhide-menu [linecolumn-separator] |
674 '("--")) | 712 '("--")) |
675 | 713 |
676 (defun showhide-date-time () | 714 (define-key menu-bar-showhide-menu [showhide-battery] |
677 "Toggle whether to show date and time in the mode-line." | 715 (menu-bar-make-mm-toggle display-battery-mode |
678 (interactive) | 716 "Battery Status" |
679 (if (display-time-mode) | 717 "Display battery status information in mode line")) |
680 (message "Display-time mode enabled.") | |
681 (message "Display-time mode disabled.")) | |
682 (customize-mark-as-set 'display-time-mode)) | |
683 | 718 |
684 (define-key menu-bar-showhide-menu [showhide-date-time] | 719 (define-key menu-bar-showhide-menu [showhide-date-time] |
685 '(menu-item "Date and Time" showhide-date-time | 720 (menu-bar-make-mm-toggle display-time-mode |
686 :help "Display date and time in the mode line" | 721 "Time, Load and Mail" |
687 :button (:toggle . display-time-mode))) | 722 "Display time, system load averages and \ |
723 mail status in mode line")) | |
688 | 724 |
689 (define-key menu-bar-showhide-menu [datetime-separator] | 725 (define-key menu-bar-showhide-menu [datetime-separator] |
690 '("--")) | 726 '("--")) |
691 | 727 |
692 (define-key menu-bar-showhide-menu [showhide-speedbar] | 728 (define-key menu-bar-showhide-menu [showhide-speedbar] |
698 (frame-visible-p | 734 (frame-visible-p |
699 (symbol-value 'speedbar-frame)))))) | 735 (symbol-value 'speedbar-frame)))))) |
700 | 736 |
701 (defvar menu-bar-showhide-fringe-menu (make-sparse-keymap "Fringe")) | 737 (defvar menu-bar-showhide-fringe-menu (make-sparse-keymap "Fringe")) |
702 | 738 |
739 (defvar menu-bar-showhide-fringe-ind-menu | |
740 (make-sparse-keymap "Buffer boundaries")) | |
741 | |
742 (defun menu-bar-showhide-fringe-ind-customize () | |
743 "Show customization buffer for `indicate-buffer-boundaries'." | |
744 (interactive) | |
745 (customize-variable 'indicate-buffer-boundaries)) | |
746 | |
747 (define-key menu-bar-showhide-fringe-ind-menu [customize] | |
748 '(menu-item "Other (Customize)" | |
749 menu-bar-showhide-fringe-ind-customize | |
750 :help "Additional choices available through Custom buffer" | |
751 :visible (display-graphic-p))) | |
752 | |
753 (defun menu-bar-showhide-fringe-ind-mixed () | |
754 "Display top and bottom indicators in opposite fringes, arrows in right." | |
755 (interactive) | |
756 (customize-set-variable 'indicate-buffer-boundaries | |
757 '((t . right) (top . left)))) | |
758 | |
759 (define-key menu-bar-showhide-fringe-ind-menu [mixed] | |
760 '(menu-item "Opposite, Arrows Right" menu-bar-showhide-fringe-ind-mixed | |
761 :help | |
762 "Show top/bottom indicators in opposite fringes, arrows in right" | |
763 :visible (display-graphic-p) | |
764 :button (:radio . (eq indicate-buffer-boundaries | |
765 '((t . right) (top . left)))))) | |
766 | |
767 (defun menu-bar-showhide-fringe-ind-box () | |
768 "Display top and bottom indicators in opposite fringes." | |
769 (interactive) | |
770 (customize-set-variable 'indicate-buffer-boundaries | |
771 '((top . left) (bottom . right)))) | |
772 | |
773 (define-key menu-bar-showhide-fringe-ind-menu [box] | |
774 '(menu-item "Opposite, No Arrows" menu-bar-showhide-fringe-ind-box | |
775 :help "Show top/bottom indicators in opposite fringes, no arrows" | |
776 :visible (display-graphic-p) | |
777 :button (:radio . (eq indicate-buffer-boundaries | |
778 '((top . left) (bottom . right)))))) | |
779 | |
780 (defun menu-bar-showhide-fringe-ind-right () | |
781 "Display buffer boundaries and arrows in the right fringe." | |
782 (interactive) | |
783 (customize-set-variable 'indicate-buffer-boundaries 'right)) | |
784 | |
785 (define-key menu-bar-showhide-fringe-ind-menu [right] | |
786 '(menu-item "In Right Fringe" menu-bar-showhide-fringe-ind-right | |
787 :help "Show buffer boundaries and arrows in right fringe" | |
788 :visible (display-graphic-p) | |
789 :button (:radio . (eq indicate-buffer-boundaries 'right)))) | |
790 | |
791 (defun menu-bar-showhide-fringe-ind-left () | |
792 "Display buffer boundaries and arrows in the left fringe." | |
793 (interactive) | |
794 (customize-set-variable 'indicate-buffer-boundaries 'left)) | |
795 | |
796 (define-key menu-bar-showhide-fringe-ind-menu [left] | |
797 '(menu-item "In Left Fringe" menu-bar-showhide-fringe-ind-left | |
798 :help "Show buffer boundaries and arrows in left fringe" | |
799 :visible (display-graphic-p) | |
800 :button (:radio . (eq indicate-buffer-boundaries 'left)))) | |
801 | |
802 (defun menu-bar-showhide-fringe-ind-none () | |
803 "Do not display any buffer boundary indicators." | |
804 (interactive) | |
805 (customize-set-variable 'indicate-buffer-boundaries nil)) | |
806 | |
807 (define-key menu-bar-showhide-fringe-ind-menu [none] | |
808 '(menu-item "No Indicators" menu-bar-showhide-fringe-ind-none | |
809 :help "Hide all buffer boundary indicators and arrows" | |
810 :visible (display-graphic-p) | |
811 :button (:radio . (eq indicate-buffer-boundaries nil)))) | |
812 | |
813 (define-key menu-bar-showhide-fringe-menu [showhide-fringe-ind] | |
814 (list 'menu-item "Buffer Boundaries" menu-bar-showhide-fringe-ind-menu | |
815 :visible `(display-graphic-p) | |
816 :help "Indicate buffer boundaries in fringe")) | |
817 | |
818 (define-key menu-bar-showhide-fringe-menu [indicate-empty-lines] | |
819 (menu-bar-make-toggle toggle-indicate-empty-lines indicate-empty-lines | |
820 "Empty Line Indicators" | |
821 "Indicating of empty lines %s" | |
822 "Indicate trailing empty lines in fringe")) | |
823 | |
703 (defun menu-bar-showhide-fringe-menu-customize () | 824 (defun menu-bar-showhide-fringe-menu-customize () |
704 "Show customization buffer for `fringe-mode'." | 825 "Show customization buffer for `fringe-mode'." |
705 (interactive) | 826 (interactive) |
706 (customize-variable 'fringe-mode)) | 827 (customize-variable 'fringe-mode)) |
707 | 828 |
708 (define-key menu-bar-showhide-fringe-menu [customize] | 829 (define-key menu-bar-showhide-fringe-menu [customize] |
709 '(menu-item "Customize" menu-bar-showhide-fringe-menu-customize | 830 '(menu-item "Customize Fringe" menu-bar-showhide-fringe-menu-customize |
710 :help "Detailed customization of fringe" | 831 :help "Detailed customization of fringe" |
711 :visible (display-graphic-p))) | 832 :visible (display-graphic-p))) |
712 | 833 |
713 (defun menu-bar-showhide-fringe-menu-customize-reset () | 834 (defun menu-bar-showhide-fringe-menu-customize-reset () |
714 "Reset the fringe mode: display fringes on both sides of a window." | 835 "Reset the fringe mode: display fringes on both sides of a window." |
715 (interactive) | 836 (interactive) |
716 (customize-set-variable 'fringe-mode nil)) | 837 (customize-set-variable 'fringe-mode nil)) |
717 | |
718 ;; The real definition is in fringe.el. | |
719 ;; This is to prevent errors in the :radio conditions below. | |
720 (setq fringe-mode nil) | |
721 | 838 |
722 (define-key menu-bar-showhide-fringe-menu [default] | 839 (define-key menu-bar-showhide-fringe-menu [default] |
723 '(menu-item "Default" menu-bar-showhide-fringe-menu-customize-reset | 840 '(menu-item "Default" menu-bar-showhide-fringe-menu-customize-reset |
724 :help "Default width fringe on both left and right side" | 841 :help "Default width fringe on both left and right side" |
725 :visible (display-graphic-p) | 842 :visible (display-graphic-p) |
726 :button (:radio . (eq fringe-mode nil)))) | 843 :button (:radio . (eq fringe-mode nil)))) |
727 | 844 |
845 (defun menu-bar-showhide-fringe-menu-customize-right () | |
846 "Display fringes only on the right of each window." | |
847 (interactive) | |
848 (require 'fringe) | |
849 (customize-set-variable 'fringe-mode '(0 . nil))) | |
850 | |
851 (define-key menu-bar-showhide-fringe-menu [right] | |
852 '(menu-item "On the Right" menu-bar-showhide-fringe-menu-customize-right | |
853 :help "Fringe only on the right side" | |
854 :visible (display-graphic-p) | |
855 :button (:radio . (equal fringe-mode '(0 . nil))))) | |
856 | |
728 (defun menu-bar-showhide-fringe-menu-customize-left () | 857 (defun menu-bar-showhide-fringe-menu-customize-left () |
729 "Display fringes only on the left of each window." | 858 "Display fringes only on the left of each window." |
730 (interactive) | 859 (interactive) |
731 (require 'fringe) | 860 (require 'fringe) |
732 (customize-set-variable 'fringe-mode '(nil . 0))) | 861 (customize-set-variable 'fringe-mode '(nil . 0))) |
734 (define-key menu-bar-showhide-fringe-menu [left] | 863 (define-key menu-bar-showhide-fringe-menu [left] |
735 '(menu-item "On the Left" menu-bar-showhide-fringe-menu-customize-left | 864 '(menu-item "On the Left" menu-bar-showhide-fringe-menu-customize-left |
736 :help "Fringe only on the left side" | 865 :help "Fringe only on the left side" |
737 :visible (display-graphic-p) | 866 :visible (display-graphic-p) |
738 :button (:radio . (equal fringe-mode '(nil . 0))))) | 867 :button (:radio . (equal fringe-mode '(nil . 0))))) |
739 | |
740 (defun menu-bar-showhide-fringe-menu-customize-right () | |
741 "Display fringes only on the right of each window." | |
742 (interactive) | |
743 (require 'fringe) | |
744 (customize-set-variable 'fringe-mode '(0 . nil))) | |
745 | |
746 (define-key menu-bar-showhide-fringe-menu [right] | |
747 '(menu-item "On the Right" menu-bar-showhide-fringe-menu-customize-right | |
748 :help "Fringe only on the right side" | |
749 :visible (display-graphic-p) | |
750 :button (:radio . (equal fringe-mode '(0 . nil))))) | |
751 | 868 |
752 (defun menu-bar-showhide-fringe-menu-customize-disable () | 869 (defun menu-bar-showhide-fringe-menu-customize-disable () |
753 "Do not display window fringes." | 870 "Do not display window fringes." |
754 (interactive) | 871 (interactive) |
755 (require 'fringe) | 872 (require 'fringe) |
808 | 925 |
809 (define-key menu-bar-showhide-menu [showhide-scroll-bar] | 926 (define-key menu-bar-showhide-menu [showhide-scroll-bar] |
810 (list 'menu-item "Scroll-bar" menu-bar-showhide-scroll-bar-menu | 927 (list 'menu-item "Scroll-bar" menu-bar-showhide-scroll-bar-menu |
811 :visible `(display-graphic-p) | 928 :visible `(display-graphic-p) |
812 :help "Select scroll-bar mode")) | 929 :help "Select scroll-bar mode")) |
930 | |
931 (define-key menu-bar-showhide-menu [showhide-tooltip-mode] | |
932 (list 'menu-item "Tooltips" 'tooltip-mode | |
933 :help "Toggle tooltips on/off" | |
934 :visible `(and (display-graphic-p) (fboundp 'x-show-tip)) | |
935 :button `(:toggle . tooltip-mode))) | |
813 | 936 |
814 (define-key menu-bar-showhide-menu [menu-bar-mode] | 937 (define-key menu-bar-showhide-menu [menu-bar-mode] |
815 '(menu-item "Menu-bar" menu-bar-mode | 938 '(menu-item "Menu-bar" menu-bar-mode |
816 :help "Toggle menu-bar on/off" | 939 :help "Toggle menu-bar on/off" |
817 :button (:toggle . menu-bar-mode))) | 940 :button (:toggle . menu-bar-mode))) |
854 (menu-bar-make-toggle toggle-debug-on-error debug-on-error | 977 (menu-bar-make-toggle toggle-debug-on-error debug-on-error |
855 "Enter Debugger on Error" "Debug on Error %s" | 978 "Enter Debugger on Error" "Debug on Error %s" |
856 "Enter Lisp debugger when an error is signaled")) | 979 "Enter Lisp debugger when an error is signaled")) |
857 (define-key menu-bar-options-menu [debugger-separator] | 980 (define-key menu-bar-options-menu [debugger-separator] |
858 '("--")) | 981 '("--")) |
859 (define-key menu-bar-options-menu [toggle-auto-compression] | 982 |
860 '(menu-item "Automatic File De/compression" | 983 (define-key menu-bar-options-menu [blink-cursor-mode] |
861 auto-compression-mode | 984 (menu-bar-make-mm-toggle blink-cursor-mode |
862 :help "Transparently decompress compressed files" | 985 "Blinking Cursor" |
863 :button (:toggle . (rassq 'jka-compr-handler | 986 "Whether the cursor blinks (Blink Cursor mode)")) |
864 file-name-handler-alist)))) | 987 (define-key menu-bar-options-menu [cursor-separator] |
988 '("--")) | |
865 | 989 |
866 (define-key menu-bar-options-menu [save-place] | 990 (define-key menu-bar-options-menu [save-place] |
867 (menu-bar-make-toggle toggle-save-place-globally save-place | 991 (menu-bar-make-toggle toggle-save-place-globally save-place |
868 "Save Place in Files between Sessions" | 992 "Save Place in Files between Sessions" |
869 "Saving place in files %s" | 993 "Saving place in files %s" |
870 "Visit files of previous session when restarting Emacs")) | 994 "Visit files of previous session when restarting Emacs" |
995 (require 'saveplace) | |
996 ;; Do it by name, to avoid a free-variable | |
997 ;; warning during byte compilation. | |
998 (set-default | |
999 'save-place (not (symbol-value 'save-place))))) | |
871 | 1000 |
872 (define-key menu-bar-options-menu [uniquify] | 1001 (define-key menu-bar-options-menu [uniquify] |
873 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style | 1002 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style |
874 "Use Directory Names in Buffer Names" | 1003 "Use Directory Names in Buffer Names" |
875 "Directory name in buffer names (uniquify) %s" | 1004 "Directory name in buffer names (uniquify) %s" |
880 'forward)))) | 1009 'forward)))) |
881 | 1010 |
882 (define-key menu-bar-options-menu [edit-options-separator] | 1011 (define-key menu-bar-options-menu [edit-options-separator] |
883 '("--")) | 1012 '("--")) |
884 (define-key menu-bar-options-menu [cua-mode] | 1013 (define-key menu-bar-options-menu [cua-mode] |
885 '(menu-item "CUA-style cut and paste" | 1014 (menu-bar-make-mm-toggle cua-mode |
886 menu-bar-toggle-cua-mode | 1015 "C-x/C-c/C-v Cut and Paste (CUA)" |
887 :help "Use C-z/C-x/C-c/C-v keys for undo/cut/copy/paste" | 1016 "Use C-z/C-x/C-c/C-v keys for undo/cut/copy/paste" |
888 :button (:toggle . cua-mode))) | 1017 (:visible (or (not (boundp 'cua-enable-cua-keys)) |
889 | 1018 cua-enable-cua-keys)))) |
890 (defun menu-bar-toggle-cua-mode () | 1019 |
891 "Toggle CUA key-binding mode. | 1020 (define-key menu-bar-options-menu [cua-emulation-mode] |
892 When enabled, using shifted movement keys will activate the region (and | 1021 (menu-bar-make-mm-toggle cua-mode |
893 highlight the region using `transient-mark-mode'), and typed text replaces | 1022 "Shift movement mark region (CUA)" |
894 the active selection. C-z, C-x, C-c, and C-v will undo, cut, copy, and | 1023 "Use shifted movement keys to set and extend the region." |
895 paste (in addition to the normal Emacs bindings)." | 1024 (:visible (and (boundp 'cua-enable-cua-keys) |
896 (interactive) | 1025 (not cua-enable-cua-keys))))) |
897 (cua-mode nil) | |
898 (customize-mark-as-set 'cua-mode) | |
899 (message "CUA-style cut and paste %s" | |
900 (if cua-mode "enabled" "disabled"))) | |
901 | 1026 |
902 (define-key menu-bar-options-menu [case-fold-search] | 1027 (define-key menu-bar-options-menu [case-fold-search] |
903 (menu-bar-make-toggle toggle-case-fold-search case-fold-search | 1028 (menu-bar-make-toggle toggle-case-fold-search case-fold-search |
904 "Case-Insensitive Search" | 1029 "Case-Insensitive Search" |
905 "Case-Insensitive Search %s" | 1030 "Case-Insensitive Search %s" |
922 (eq 'turn-on-auto-fill text-mode-hook))))) | 1047 (eq 'turn-on-auto-fill text-mode-hook))))) |
923 (define-key menu-bar-options-menu [truncate-lines] | 1048 (define-key menu-bar-options-menu [truncate-lines] |
924 '(menu-item "Truncate Long Lines in this Buffer" | 1049 '(menu-item "Truncate Long Lines in this Buffer" |
925 toggle-truncate-lines | 1050 toggle-truncate-lines |
926 :help "Truncate long lines on the screen" | 1051 :help "Truncate long lines on the screen" |
927 :button (:toggle . truncate-lines))) | 1052 :button (:toggle . truncate-lines) |
1053 :enable (menu-bar-menu-frame-live-and-visible-p))) | |
928 | 1054 |
929 (define-key menu-bar-options-menu [highlight-separator] | 1055 (define-key menu-bar-options-menu [highlight-separator] |
930 '("--")) | 1056 '("--")) |
931 (define-key menu-bar-options-menu [highlight-paren-mode] | 1057 (define-key menu-bar-options-menu [highlight-paren-mode] |
932 (menu-bar-make-mm-toggle show-paren-mode | 1058 (menu-bar-make-mm-toggle show-paren-mode |
935 (define-key menu-bar-options-menu [transient-mark-mode] | 1061 (define-key menu-bar-options-menu [transient-mark-mode] |
936 (menu-bar-make-mm-toggle transient-mark-mode | 1062 (menu-bar-make-mm-toggle transient-mark-mode |
937 "Active Region Highlighting" | 1063 "Active Region Highlighting" |
938 "Make text in active region stand out in color (Transient Mark mode)" | 1064 "Make text in active region stand out in color (Transient Mark mode)" |
939 (:enable (not cua-mode)))) | 1065 (:enable (not cua-mode)))) |
940 (define-key menu-bar-options-menu [toggle-global-lazy-font-lock-mode] | |
941 (menu-bar-make-mm-toggle global-font-lock-mode | |
942 "Syntax Highlighting" | |
943 "Colorize text based on language syntax (Global Font Lock mode)")) | |
944 | 1066 |
945 | 1067 |
946 ;; The "Tools" menu items | 1068 ;; The "Tools" menu items |
947 | 1069 |
948 (defun send-mail-item-name () | 1070 (defun send-mail-item-name () |
986 (define-key menu-bar-games-menu [snake] | 1108 (define-key menu-bar-games-menu [snake] |
987 '(menu-item "Snake" snake | 1109 '(menu-item "Snake" snake |
988 :help "Move snake around avoiding collisions")) | 1110 :help "Move snake around avoiding collisions")) |
989 (define-key menu-bar-games-menu [mult] | 1111 (define-key menu-bar-games-menu [mult] |
990 '(menu-item "Multiplication Puzzle" mpuz | 1112 '(menu-item "Multiplication Puzzle" mpuz |
991 :help "Excercise brain with multiplication")) | 1113 :help "Exercise brain with multiplication")) |
992 (define-key menu-bar-games-menu [life] | 1114 (define-key menu-bar-games-menu [life] |
993 '(menu-item "Life" life | 1115 '(menu-item "Life" life |
994 :help "Watch how John Conway's cellular automaton evolves")) | 1116 :help "Watch how John Conway's cellular automaton evolves")) |
995 (define-key menu-bar-games-menu [hanoi] | 1117 (define-key menu-bar-games-menu [hanoi] |
996 '(menu-item "Towers of Hanoi" hanoi | 1118 '(menu-item "Towers of Hanoi" hanoi |
1048 (define-key menu-bar-tools-menu [separator-vc] | 1170 (define-key menu-bar-tools-menu [separator-vc] |
1049 '("--")) | 1171 '("--")) |
1050 | 1172 |
1051 (defvar vc-menu-map (make-sparse-keymap "Version Control")) | 1173 (defvar vc-menu-map (make-sparse-keymap "Version Control")) |
1052 (define-key menu-bar-tools-menu [pcl-cvs] | 1174 (define-key menu-bar-tools-menu [pcl-cvs] |
1053 `(menu-item "PCL-CVS" ,cvs-global-menu | 1175 '(menu-item "PCL-CVS" cvs-global-menu |
1054 :help "Module-level interface to CVS")) | 1176 :help "Module-level interface to CVS")) |
1055 (define-key menu-bar-tools-menu [vc] | 1177 (define-key menu-bar-tools-menu [vc] |
1056 (list 'menu-item "Version Control" vc-menu-map | 1178 (list 'menu-item "Version Control" vc-menu-map |
1057 :help "Interface to RCS, CVS, SCCS")) | 1179 :help "Interface to RCS, CVS, SCCS")) |
1058 | 1180 |
1059 (define-key menu-bar-tools-menu [separator-compare] | 1181 (define-key menu-bar-tools-menu [separator-compare] |
1093 :help "Invoke a shell command and catch its output")) | 1215 :help "Invoke a shell command and catch its output")) |
1094 (define-key menu-bar-tools-menu [compile] | 1216 (define-key menu-bar-tools-menu [compile] |
1095 '(menu-item "Compile..." compile | 1217 '(menu-item "Compile..." compile |
1096 :help "Invoke compiler or Make, view compilation errors")) | 1218 :help "Invoke compiler or Make, view compilation errors")) |
1097 (define-key menu-bar-tools-menu [grep] | 1219 (define-key menu-bar-tools-menu [grep] |
1098 '(menu-item "Search Files (Grep)..." grep | 1220 '(menu-item "Search Files (with grep)..." grep |
1099 :help "Search files for strings or regexps (with Grep)")) | 1221 :help "Search files for strings or regexps (with grep)")) |
1100 | 1222 |
1101 | 1223 |
1102 ;; The "Help" menu items | 1224 ;; The "Help" menu items |
1103 | 1225 |
1104 (defvar menu-bar-describe-menu (make-sparse-keymap "Describe")) | 1226 (defvar menu-bar-describe-menu (make-sparse-keymap "Describe")) |
1126 (define-key menu-bar-describe-menu [separator-desc-mule] | 1248 (define-key menu-bar-describe-menu [separator-desc-mule] |
1127 '("--")) | 1249 '("--")) |
1128 | 1250 |
1129 (define-key menu-bar-describe-menu [list-keybindings] | 1251 (define-key menu-bar-describe-menu [list-keybindings] |
1130 '(menu-item "List Key Bindings" describe-bindings | 1252 '(menu-item "List Key Bindings" describe-bindings |
1131 :help "Display a list of all current keybindings")) | 1253 :help "Display all current keybindings (keyboard shortcuts)")) |
1132 (define-key menu-bar-describe-menu [describe-current-display-table] | 1254 (define-key menu-bar-describe-menu [describe-current-display-table] |
1133 '(menu-item "Describe Display Table" describe-current-display-table | 1255 '(menu-item "Describe Display Table" describe-current-display-table |
1134 :help "Describe the current display table")) | 1256 :help "Describe the current display table")) |
1135 (define-key menu-bar-describe-menu [describe-face] | 1257 (define-key menu-bar-describe-menu [describe-face] |
1136 '(menu-item "Describe Face..." describe-face | 1258 '(menu-item "Describe Face..." describe-face |
1140 :help "Display documentation of variable/option")) | 1262 :help "Display documentation of variable/option")) |
1141 (define-key menu-bar-describe-menu [describe-function] | 1263 (define-key menu-bar-describe-menu [describe-function] |
1142 '(menu-item "Describe Function..." describe-function | 1264 '(menu-item "Describe Function..." describe-function |
1143 :help "Display documentation of function/command")) | 1265 :help "Display documentation of function/command")) |
1144 (define-key menu-bar-describe-menu [describe-key-1] | 1266 (define-key menu-bar-describe-menu [describe-key-1] |
1145 '(menu-item "Describe Key..." describe-key | 1267 '(menu-item "Describe Key or Mouse Operation..." describe-key |
1146 ;; Users typically don't identify keys and menu items... | 1268 ;; Users typically don't identify keys and menu items... |
1147 :help "Display documentation of command bound to a \ | 1269 :help "Display documentation of command bound to a \ |
1148 key (or menu-item)")) | 1270 key, a click, or a menu-item")) |
1149 (define-key menu-bar-describe-menu [describe-key] | |
1150 '(menu-item "What's This? " describe-key | |
1151 ;; Users typically don't identify keys and menu items... | |
1152 :help "Display documentation of command bound to a \ | |
1153 key (or menu-item)")) | |
1154 (define-key menu-bar-describe-menu [describe-mode] | 1271 (define-key menu-bar-describe-menu [describe-mode] |
1155 '(menu-item "Describe Buffer Modes" describe-mode | 1272 '(menu-item "Describe Buffer Modes" describe-mode |
1156 :help "Describe this buffer's major and minor mode")) | 1273 :help "Describe this buffer's major and minor mode")) |
1157 | 1274 |
1158 (defvar menu-bar-apropos-menu (make-sparse-keymap "Apropos")) | 1275 (defvar menu-bar-apropos-menu (make-sparse-keymap "Apropos")) |
1231 '(menu-item "Introduction to Emacs Lisp" menu-bar-read-lispintro | 1348 '(menu-item "Introduction to Emacs Lisp" menu-bar-read-lispintro |
1232 :help "Read the Introduction to Emacs Lisp Programming")) | 1349 :help "Read the Introduction to Emacs Lisp Programming")) |
1233 (define-key menu-bar-manuals-menu [sep3] | 1350 (define-key menu-bar-manuals-menu [sep3] |
1234 '("--")) | 1351 '("--")) |
1235 (define-key menu-bar-manuals-menu [command] | 1352 (define-key menu-bar-manuals-menu [command] |
1236 '(menu-item "Find Command in Manual" Info-goto-emacs-command-node | 1353 '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node |
1237 :help "Display manual section that describes a command")) | 1354 :help "Display manual section that describes a command")) |
1238 (define-key menu-bar-manuals-menu [key] | 1355 (define-key menu-bar-manuals-menu [key] |
1239 '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node | 1356 '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node |
1240 :help "Display manual section that describes a key")) | 1357 :help "Display manual section that describes a key")) |
1241 | 1358 |
1242 (define-key menu-bar-help-menu [eliza] | 1359 (define-key menu-bar-help-menu [eliza] |
1243 '(menu-item "Emacs Psychiatrist" doctor | 1360 '(menu-item "Emacs Psychotherapist" doctor |
1244 :help "Our doctor will help you feel better")) | 1361 :help "Our doctor will help you feel better")) |
1245 (define-key menu-bar-help-menu [sep4] | 1362 (define-key menu-bar-help-menu [sep4] |
1246 '("--")) | 1363 '("--")) |
1247 (define-key menu-bar-help-menu [describe-no-warranty] | 1364 (define-key menu-bar-help-menu [describe-no-warranty] |
1248 '(menu-item "(Non)Warranty" describe-no-warranty | 1365 '(menu-item "(Non)Warranty" describe-no-warranty |
1252 :help "Show the Emacs license (GPL)")) | 1369 :help "Show the Emacs license (GPL)")) |
1253 (define-key menu-bar-help-menu [describe-distribution] | 1370 (define-key menu-bar-help-menu [describe-distribution] |
1254 '(menu-item "Getting New Versions" describe-distribution | 1371 '(menu-item "Getting New Versions" describe-distribution |
1255 :help "How to get latest versions of Emacs")) | 1372 :help "How to get latest versions of Emacs")) |
1256 (define-key menu-bar-help-menu [more] | 1373 (define-key menu-bar-help-menu [more] |
1257 '(menu-item "Find Extra Packages" | 1374 '(menu-item "External Packages" menu-bar-help-extra-packages |
1258 menu-bar-help-extra-packages | 1375 :help "Lisp packages distributed separately for use in Emacs")) |
1259 :help "Where to find some extra packages and possible updates")) | |
1260 (defun menu-bar-help-extra-packages () | 1376 (defun menu-bar-help-extra-packages () |
1261 "Display help about some additional packages available for Emacs." | 1377 "Display help about some additional packages available for Emacs." |
1262 (interactive) | 1378 (interactive) |
1263 (let (enable-local-variables) | 1379 (let (enable-local-variables) |
1264 (view-file (expand-file-name "MORE.STUFF" | 1380 (view-file (expand-file-name "MORE.STUFF" |
1268 '(menu-item "About Emacs" display-splash-screen | 1384 '(menu-item "About Emacs" display-splash-screen |
1269 :help "Display version number, copyright info, and basic help")) | 1385 :help "Display version number, copyright info, and basic help")) |
1270 (define-key menu-bar-help-menu [sep2] | 1386 (define-key menu-bar-help-menu [sep2] |
1271 '("--")) | 1387 '("--")) |
1272 (define-key menu-bar-help-menu [finder-by-keyword] | 1388 (define-key menu-bar-help-menu [finder-by-keyword] |
1273 '(menu-item "Find Emacs Packages..." finder-by-keyword | 1389 '(menu-item "Find Emacs Packages" finder-by-keyword |
1274 :help "Find packages and features by keyword")) | 1390 :help "Find packages and features by keyword")) |
1275 (define-key menu-bar-help-menu [manuals] | 1391 (define-key menu-bar-help-menu [manuals] |
1276 (list 'menu-item "More Manuals" menu-bar-manuals-menu | 1392 (list 'menu-item "More Manuals" menu-bar-manuals-menu |
1277 :help "Search and browse on-line manuals")) | 1393 :help "Search and browse on-line manuals")) |
1278 (define-key menu-bar-help-menu [emacs-manual] | 1394 (define-key menu-bar-help-menu [emacs-manual] |
1308 :help "Learn how to use Emacs (choose a language)")) | 1424 :help "Learn how to use Emacs (choose a language)")) |
1309 (define-key menu-bar-help-menu [emacs-tutorial] | 1425 (define-key menu-bar-help-menu [emacs-tutorial] |
1310 '(menu-item "Emacs Tutorial" help-with-tutorial | 1426 '(menu-item "Emacs Tutorial" help-with-tutorial |
1311 :help "Learn how to use Emacs")) | 1427 :help "Learn how to use Emacs")) |
1312 | 1428 |
1313 (defun kill-this-buffer () ; for the menubar | 1429 (defun menu-bar-menu-frame-live-and-visible-p () |
1430 "Return non-nil if the menu frame is alive and visible. | |
1431 The menu frame is the frame for which we are updating the menu." | |
1432 (let ((menu-frame (or menu-updating-frame (selected-frame)))) | |
1433 (and (frame-live-p menu-frame) | |
1434 (frame-visible-p menu-frame)))) | |
1435 | |
1436 (defun menu-bar-non-minibuffer-window-p () | |
1437 "Return non-nil if selected window of the menu frame is not a minibuf window. | |
1438 | |
1439 See the documentation of `menu-bar-menu-frame-live-and-visible-p' | |
1440 for the definition of the menu frame." | |
1441 (let ((menu-frame (or menu-updating-frame (selected-frame)))) | |
1442 (not (window-minibuffer-p (frame-selected-window menu-frame))))) | |
1443 | |
1444 (defun kill-this-buffer () ; for the menu bar | |
1314 "Kill the current buffer." | 1445 "Kill the current buffer." |
1315 (interactive) | 1446 (interactive) |
1316 (kill-buffer (current-buffer))) | 1447 (kill-buffer (current-buffer))) |
1317 | 1448 |
1318 (defun kill-this-buffer-enabled-p () | 1449 (defun kill-this-buffer-enabled-p () |
1320 (buffers (buffer-list))) | 1451 (buffers (buffer-list))) |
1321 (while buffers | 1452 (while buffers |
1322 (or (string-match "^ " (buffer-name (car buffers))) | 1453 (or (string-match "^ " (buffer-name (car buffers))) |
1323 (setq count (1+ count))) | 1454 (setq count (1+ count))) |
1324 (setq buffers (cdr buffers))) | 1455 (setq buffers (cdr buffers))) |
1325 (and (not (window-minibuffer-p (frame-selected-window menu-updating-frame))) | 1456 (and (menu-bar-non-minibuffer-window-p) |
1326 (> count 1)))) | 1457 (> count 1)))) |
1327 | 1458 |
1328 (put 'dired 'menu-enable | 1459 (put 'dired 'menu-enable '(menu-bar-non-minibuffer-window-p)) |
1329 '(not (window-minibuffer-p (frame-selected-window menu-updating-frame)))) | |
1330 | 1460 |
1331 ;; Permit deleting frame if it would leave a visible or iconified frame. | 1461 ;; Permit deleting frame if it would leave a visible or iconified frame. |
1332 (defun delete-frame-enabled-p () | 1462 (defun delete-frame-enabled-p () |
1333 "Return non-nil if `delete-frame' should be enabled in the menu bar." | 1463 "Return non-nil if `delete-frame' should be enabled in the menu bar." |
1334 (let ((frames (frame-list)) | 1464 (let ((frames (frame-list)) |
1418 (interactive) | 1548 (interactive) |
1419 (let (frame) | 1549 (let (frame) |
1420 (dolist (f (frame-list)) | 1550 (dolist (f (frame-list)) |
1421 (when (equal last-command-event (frame-parameter f 'name)) | 1551 (when (equal last-command-event (frame-parameter f 'name)) |
1422 (setq frame f))) | 1552 (setq frame f))) |
1423 (make-frame-visible frame) | 1553 ;; FRAME can be nil when user specifies the selected frame. |
1424 (raise-frame frame) | 1554 (setq frame (or frame (selected-frame))) |
1425 (select-frame frame))) | 1555 (make-frame-visible frame) |
1556 (raise-frame frame) | |
1557 (select-frame frame))) | |
1426 | 1558 |
1427 (defun menu-bar-update-buffers-1 (elt) | 1559 (defun menu-bar-update-buffers-1 (elt) |
1428 (let* ((buf (car elt)) | 1560 (let* ((buf (car elt)) |
1429 (file | 1561 (file |
1430 (and (if (eq buffers-menu-show-directories 'unless-uniquify) | 1562 (and (if (eq buffers-menu-show-directories 'unless-uniquify) |
1537 (list 'next-buffer | 1669 (list 'next-buffer |
1538 'menu-item | 1670 'menu-item |
1539 "Next Buffer" | 1671 "Next Buffer" |
1540 'next-buffer | 1672 'next-buffer |
1541 :help "Switch to the \"next\" buffer in a cyclic order") | 1673 :help "Switch to the \"next\" buffer in a cyclic order") |
1542 (list 'prev-buffer | 1674 (list 'previous-buffer |
1543 'menu-item | 1675 'menu-item |
1544 "Previous Buffer" | 1676 "Previous Buffer" |
1545 'prev-buffer | 1677 'previous-buffer |
1546 :help "Switch to the \"previous\" buffer in a cyclic order") | 1678 :help "Switch to the \"previous\" buffer in a cyclic order") |
1547 (list 'select-named-buffer | 1679 (list 'select-named-buffer |
1548 'menu-item | 1680 'menu-item |
1549 "Select Named Buffer..." | 1681 "Select Named Buffer..." |
1550 'switch-to-buffer | 1682 'switch-to-buffer |
1558 (setq buffers-menu | 1690 (setq buffers-menu |
1559 (nconc buffers-menu menu-bar-buffers-menu-command-entries)) | 1691 (nconc buffers-menu menu-bar-buffers-menu-command-entries)) |
1560 | 1692 |
1561 (setq buffers-menu (cons 'keymap (cons "Select Buffer" buffers-menu))) | 1693 (setq buffers-menu (cons 'keymap (cons "Select Buffer" buffers-menu))) |
1562 (define-key (current-global-map) [menu-bar buffer] | 1694 (define-key (current-global-map) [menu-bar buffer] |
1563 (cons "Buffers" buffers-menu))))) | 1695 ;; Call copy-sequence so the string is not pure. |
1696 (cons (copy-sequence "Buffers") buffers-menu))))) | |
1564 | 1697 |
1565 (add-hook 'menu-bar-update-hook 'menu-bar-update-buffers) | 1698 (add-hook 'menu-bar-update-hook 'menu-bar-update-buffers) |
1566 | 1699 |
1567 (menu-bar-update-buffers) | 1700 (menu-bar-update-buffers) |
1568 | 1701 |
1609 :help "Abort input and exit minibuffer")) | 1742 :help "Abort input and exit minibuffer")) |
1610 (define-key map [menu-bar minibuf return] | 1743 (define-key map [menu-bar minibuf return] |
1611 (list 'menu-item "Enter" 'exit-minibuffer | 1744 (list 'menu-item "Enter" 'exit-minibuffer |
1612 :help "Terminate input and exit minibuffer"))) | 1745 :help "Terminate input and exit minibuffer"))) |
1613 | 1746 |
1614 (defcustom menu-bar-mode t | 1747 ;;;###autoload |
1615 "Toggle display of a menu bar on each frame. | 1748 ;; This comment is taken from tool-bar.el near |
1616 Setting this variable directly does not take effect; | 1749 ;; (put 'tool-bar-mode ...) |
1617 use either \\[customize] or the function `menu-bar-mode'." | 1750 ;; We want to pretend the menu bar by standard is on, as this will make |
1618 :set (lambda (symbol value) | 1751 ;; customize consider disabling the menu bar a customization, and save |
1619 (menu-bar-mode (or value 0))) | 1752 ;; that. We could do this for real by setting :init-value below, but |
1620 :initialize 'custom-initialize-default | 1753 ;; that would overwrite disabling the tool bar from X resources. |
1621 :type 'boolean | 1754 (put 'menu-bar-mode 'standard-value '(t)) |
1622 :group 'frames) | 1755 |
1623 | 1756 ;;;###autoload |
1624 (defun menu-bar-mode (&optional flag) | 1757 (define-minor-mode menu-bar-mode |
1625 "Toggle display of a menu bar on each frame. | 1758 "Toggle display of a menu bar on each frame. |
1626 This command applies to all frames that exist and frames to be | 1759 This command applies to all frames that exist and frames to be |
1627 created in the future. | 1760 created in the future. |
1628 With a numeric argument, if the argument is positive, | 1761 With a numeric argument, if the argument is positive, |
1629 turn on menu bars; otherwise, turn off menu bars." | 1762 turn on menu bars; otherwise, turn off menu bars." |
1630 (interactive "P") | 1763 :init-value nil |
1631 | 1764 :global t |
1765 :group 'frames | |
1632 ;; Make menu-bar-mode and default-frame-alist consistent. | 1766 ;; Make menu-bar-mode and default-frame-alist consistent. |
1633 (let ((default (assq 'menu-bar-lines default-frame-alist))) | 1767 (let ((lines (if menu-bar-mode 1 0))) |
1634 (if default | 1768 ;; Alter existing frames... |
1635 (setq menu-bar-mode (not (eq (cdr default) 0))) | 1769 (mapc (lambda (frame) |
1636 (setq default-frame-alist | 1770 (modify-frame-parameters frame |
1637 (cons (cons 'menu-bar-lines (if menu-bar-mode 1 0)) | 1771 (list (cons 'menu-bar-lines lines)))) |
1638 default-frame-alist)))) | 1772 (frame-list)) |
1639 | 1773 ;; ...and future ones. |
1640 ;; Toggle or set the mode, according to FLAG. | 1774 (let ((elt (assq 'menu-bar-lines default-frame-alist))) |
1641 (setq menu-bar-mode (if (null flag) (not menu-bar-mode) | 1775 (if elt |
1642 (> (prefix-numeric-value flag) 0))) | 1776 (setcdr elt lines) |
1643 | 1777 (add-to-list 'default-frame-alist (cons 'menu-bar-lines lines))))) |
1644 ;; Apply it to default-frame-alist. | 1778 |
1645 (let ((parameter (assq 'menu-bar-lines default-frame-alist))) | 1779 ;; Make the message appear when Emacs is idle. We can not call message |
1646 (if (consp parameter) | 1780 ;; directly. The minor-mode message "Menu-bar mode disabled" comes |
1647 (setcdr parameter (if menu-bar-mode 1 0)) | 1781 ;; after this function returns, overwriting any message we do here. |
1648 (setq default-frame-alist | 1782 (when (and (interactive-p) (not menu-bar-mode)) |
1649 (cons (cons 'menu-bar-lines (if menu-bar-mode 1 0)) | 1783 (run-with-idle-timer 0 nil 'message |
1650 default-frame-alist)))) | 1784 "Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear.")) |
1651 | |
1652 ;; Apply it to existing frames. | |
1653 (let ((frames (frame-list))) | |
1654 (while frames | |
1655 (let ((height (cdr (assq 'height (frame-parameters (car frames)))))) | |
1656 (modify-frame-parameters (car frames) | |
1657 (list (cons 'menu-bar-lines | |
1658 (if menu-bar-mode 1 0)))) | |
1659 (modify-frame-parameters (car frames) | |
1660 (list (cons 'height height)))) | |
1661 (setq frames (cdr frames)))) | |
1662 | |
1663 (when (interactive-p) | |
1664 (if menu-bar-mode | |
1665 (message "Menu-bar mode enabled.") | |
1666 (message "Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear.")) | |
1667 (customize-mark-as-set 'menu-bar-mode)) | |
1668 | |
1669 menu-bar-mode) | 1785 menu-bar-mode) |
1670 | 1786 |
1671 (provide 'menu-bar) | 1787 (provide 'menu-bar) |
1672 | 1788 |
1789 ;;; arch-tag: 6e6a3c22-4ec4-4d3d-8190-583f8ef94ced | |
1673 ;;; menu-bar.el ends here | 1790 ;;; menu-bar.el ends here |