;;; menu-bar.el --- define a default menu bar
-;; Copyright (C) 1993, 1994, 1995, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005,
+;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: RMS
;; Maintainer: FSF
;; help key.
(setq menu-bar-final-items '(help-menu))
-(define-key global-map [menu-bar help-menu] (cons "Help" menu-bar-help-menu))
+(define-key global-map [menu-bar help-menu] (cons (purecopy "Help") menu-bar-help-menu))
(defvar menu-bar-tools-menu (make-sparse-keymap "Tools"))
-(define-key global-map [menu-bar tools] (cons "Tools" menu-bar-tools-menu))
+(define-key global-map [menu-bar tools] (cons (purecopy "Tools") menu-bar-tools-menu))
;; This definition is just to show what this looks like.
;; It gets modified in place when menu-bar-update-buffers is called.
(defvar global-buffers-menu-map (make-sparse-keymap "Buffers"))
(define-key global-map [menu-bar buffer]
- (cons "Buffers" global-buffers-menu-map))
+ (cons (purecopy "Buffers") global-buffers-menu-map))
(defvar menu-bar-options-menu (make-sparse-keymap "Options"))
(define-key global-map [menu-bar options]
- (cons "Options" menu-bar-options-menu))
+ (cons (purecopy "Options") menu-bar-options-menu))
(defvar menu-bar-edit-menu (make-sparse-keymap "Edit"))
-(define-key global-map [menu-bar edit] (cons "Edit" menu-bar-edit-menu))
+(define-key global-map [menu-bar edit] (cons (purecopy "Edit") menu-bar-edit-menu))
(defvar menu-bar-file-menu (make-sparse-keymap "File"))
-(define-key global-map [menu-bar file] (cons "File" menu-bar-file-menu))
+(define-key global-map [menu-bar file] (cons (purecopy "File") menu-bar-file-menu))
;; This alias is for compatibility with 19.28 and before.
(defvar menu-bar-files-menu menu-bar-file-menu)
;; This is referenced by some code below; it is defined in uniquify.el
(defvar uniquify-buffer-name-style)
+;; From emulation/cua-base.el; used below
+(defvar cua-enable-cua-keys)
+
\f
;; The "File" menu items
(define-key menu-bar-file-menu [exit-emacs]
:help ,(purecopy "Save unsaved buffers, then exit")))
(define-key menu-bar-file-menu [separator-exit]
- (purecopy "--"))
+ menu-bar-separator)
;; Don't use delete-frame as event name because that is a special
;; event.
:help ,(purecopy "Split selected window in two windows")))
(define-key menu-bar-file-menu [separator-window]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-file-menu [ps-print-region]
`(menu-item ,(purecopy "Postscript Print Region (B+W)") ps-print-region
:help ,(purecopy "Print current buffer with page headings")))
(define-key menu-bar-file-menu [separator-print]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-file-menu [recover-session]
`(menu-item ,(purecopy "Recover Crashed Session") recover-session
:help ,(purecopy "Save current buffer to its file")))
(define-key menu-bar-file-menu [separator-save]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(defun menu-find-file-existing ()
"Edit the existing file FILENAME."
(define-key menu-bar-search-menu [i-search]
`(menu-item ,(purecopy "Incremental Search") ,menu-bar-i-search-menu))
(define-key menu-bar-search-menu [separator-tag-isearch]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-search-menu [tags-continue]
`(menu-item ,(purecopy "Continue Tags Search") tags-loop-continue
`(menu-item ,(purecopy "Search Tagged Files...") tags-search
:help ,(purecopy "Search for a regexp in all tagged files")))
(define-key menu-bar-search-menu [separator-tag-search]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-search-menu [repeat-search-back]
`(menu-item ,(purecopy "Repeat Backwards") nonincremental-repeat-search-backward
regexp-search-ring))
:help ,(purecopy "Repeat last search forward")))
(define-key menu-bar-search-menu [separator-repeat-search]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-search-menu [re-search-backward]
`(menu-item ,(purecopy "Regexp Backwards...") nonincremental-re-search-backward
`(menu-item ,(purecopy "Replace in Tagged Files...") tags-query-replace
:help ,(purecopy "Interactively replace a regexp in all tagged files")))
(define-key menu-bar-replace-menu [separator-replace-tags]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-replace-menu [query-replace-regexp]
`(menu-item ,(purecopy "Replace Regexp...") query-replace-regexp
,(purecopy "Fill text in region to fit between left and right margin")))
(define-key menu-bar-edit-menu [separator-bookmark]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-edit-menu [bookmark]
`(menu-item ,(purecopy "Bookmarks") menu-bar-bookmark-map))
:help ,(purecopy "Tell Tags commands which tag table file to use")))
(define-key menu-bar-goto-menu [separator-tag-file]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-goto-menu [apropos-tags]
`(menu-item ,(purecopy "Tags Apropos...") tags-apropos
:help ,(purecopy "Find definition of function or variable")))
(define-key menu-bar-goto-menu [separator-tags]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-goto-menu [end-of-buf]
`(menu-item ,(purecopy "Goto End of Buffer") end-of-buffer))
`(menu-item ,(purecopy "Search") ,menu-bar-search-menu))
(define-key menu-bar-edit-menu [separator-search]
- `(menu-item ,(purecopy "--")))
+ menu-bar-separator)
(define-key menu-bar-edit-menu [mark-whole-buffer]
`(menu-item ,(purecopy "Select All") mark-whole-buffer
(not (mouse-region-match)))
:help
,(purecopy "Delete the text in region between mark and current position")))
-(defvar yank-menu (cons "Select Yank" nil))
+(defvar yank-menu (cons (purecopy "Select Yank") nil))
(fset 'yank-menu (cons 'keymap yank-menu))
(define-key menu-bar-edit-menu [paste-from-menu]
`(menu-item ,(purecopy "Paste from Kill Menu") yank-menu
`(menu-item ,(purecopy "Copy") menu-bar-kill-ring-save
:enable mark-active
:help ,(purecopy "Copy text in region between mark and current position")
- :keys "\\[kill-ring-save]"))
+ :keys ,(purecopy "\\[kill-ring-save]")))
(define-key menu-bar-edit-menu [cut]
`(menu-item ,(purecopy "Cut") kill-region
:enable (and mark-active (not buffer-read-only))
`(menu-item ,(purecopy "Settings Matching Regexp...") customize-apropos
:help ,(purecopy "Browse customizable settings whose names match regexp")))
(define-key menu-bar-custom-menu [separator-1]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-custom-menu [customize-group]
`(menu-item ,(purecopy "Specific Group...") customize-group
:help ,(purecopy "Customize settings of specific group")))
`(menu-item ,(purecopy "Specific Option...") customize-option
:help ,(purecopy "Customize value of specific option")))
(define-key menu-bar-custom-menu [separator-2]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-custom-menu [customize-changed-options]
`(menu-item ,(purecopy "New Options...") customize-changed-options
:help ,(purecopy "Options added or changed in recent Emacs versions")))
`(menu-item ,(purecopy "Saved Options") customize-saved
:help ,(purecopy "Customize previously saved options")))
(define-key menu-bar-custom-menu [separator-3]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-custom-menu [customize-browse]
`(menu-item ,(purecopy "Browse Customization Groups") customize-browse
:help ,(purecopy "Browse all customization groups")))
DOC is the text to use for the menu entry.
HELP is the text to use for the tooltip.
PROPS are additional properties."
- `'(menu-item ,(purecopy doc) ,fname
- ,@props
- :help ,(purecopy help)
- :button (:toggle . (and (default-boundp ',fname)
- (default-value ',fname)))))
+ `(list 'menu-item (purecopy ,doc) ',fname
+ ,@(mapcar (lambda (p) (list 'quote p)) props)
+ :help (purecopy ,help)
+ :button '(:toggle . (and (default-boundp ',fname)
+ (default-value ',fname)))))
(defmacro menu-bar-make-toggle (name variable doc message help &rest body)
`(progn
;; a candidate for "Save Options", and we do not want to save options
;; the user have already set explicitly in his init file.
(if interactively (customize-mark-as-set ',variable)))
- '(menu-item ,(purecopy doc) ,name
- :help ,(purecopy help)
- :button (:toggle . (and (default-boundp ',variable)
- (default-value ',variable))))))
+ (list 'menu-item (purecopy ,doc) ',name
+ :help (purecopy ,help)
+ :button '(:toggle . (and (default-boundp ',variable)
+ (default-value ',variable))))))
;; Function for setting/saving default font.
(custom-push-theme 'theme-face 'default 'user 'set spec)
(put 'default 'face-modified nil))))
+
+
;;; Assemble all the top-level items of the "Options" menu
(define-key menu-bar-options-menu [customize]
`(menu-item ,(purecopy "Customize Emacs") ,menu-bar-custom-menu))
tooltip-mode menu-bar-mode tool-bar-mode
save-place uniquify-buffer-name-style fringe-mode
indicate-empty-lines indicate-buffer-boundaries
- case-fold-search
+ case-fold-search font-use-system-font
current-language-environment default-input-method
;; Saving `text-mode-hook' is somewhat questionable,
;; as we might get more than we bargain for, if
:help ,(purecopy "Save options set from the menu above")))
(define-key menu-bar-options-menu [custom-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [menu-set-font]
`(menu-item ,(purecopy "Set Default Font...") menu-set-font
:visible (display-multi-font-p)
:help ,(purecopy "Select a default font")))
+(if (featurep 'system-font-setting)
+ (define-key menu-bar-options-menu [menu-system-font]
+ (menu-bar-make-toggle toggle-use-system-font font-use-system-font
+ "Use system font"
+ "Use system font: %s"
+ "Use the monospaced font defined by the system")))
+
+
;; The "Show/Hide" submenu of menu "Options"
(defvar menu-bar-showhide-menu (make-sparse-keymap "Show/Hide"))
"Show the size of the buffer in the mode line"))
(define-key menu-bar-showhide-menu [linecolumn-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-showhide-menu [showhide-battery]
(menu-bar-make-mm-toggle display-battery-mode
mail status in mode line"))
(define-key menu-bar-showhide-menu [datetime-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-showhide-menu [showhide-speedbar]
`(menu-item ,(purecopy "Speedbar") speedbar-frame-mode
`(menu-item ,(purecopy "Show/Hide") ,menu-bar-showhide-menu))
(define-key menu-bar-options-menu [showhide-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [mule]
;; It is better not to use backquote here,
; :help ,(purecopy "Toggle important global options")))
(define-key menu-bar-options-menu [mule-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [debug-on-quit]
(menu-bar-make-toggle toggle-debug-on-quit debug-on-quit
"Enter Debugger on Error" "Debug on Error %s"
"Enter Lisp debugger when an error is signaled"))
(define-key menu-bar-options-menu [debugger-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [blink-cursor-mode]
(menu-bar-make-mm-toggle blink-cursor-mode
"Blinking Cursor"
"Whether the cursor blinks (Blink Cursor mode)"))
(define-key menu-bar-options-menu [cursor-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [save-place]
(menu-bar-make-toggle toggle-save-place-globally save-place
'forward))))
(define-key menu-bar-options-menu [edit-options-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [cua-mode]
(menu-bar-make-mm-toggle cua-mode
"C-x/C-c/C-v Cut and Paste (CUA)"
(interactive)
(unless visual-line-mode
(visual-line-mode 1))
- (message "Visual-Line mode enabled"))
+ (message ,(purecopy "Visual-Line mode enabled")))
:help ,(purecopy "Wrap long lines at word boundaries")
:button (:radio . (and (null truncate-lines)
(not (truncated-partial-width-window-p))
(define-key menu-bar-options-menu [highlight-separator]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-options-menu [highlight-paren-mode]
(menu-bar-make-mm-toggle show-paren-mode
"Paren Match Highlighting"
`(menu-item ,(purecopy "Games") ,menu-bar-games-menu))
(define-key menu-bar-tools-menu [separator-games]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-games-menu [zone]
`(menu-item ,(purecopy "Zone Out") zone
`(menu-item ,(purecopy "Encryption/Decryption") ,menu-bar-encryption-decryption-menu))
(define-key menu-bar-tools-menu [separator-encryption-decryption]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-encryption-decryption-menu [insert-keys]
`(menu-item ,(purecopy "Insert Keys") epa-insert-keys
:help ,(purecopy "Browse your public keyring")))
(define-key menu-bar-encryption-decryption-menu [separator-keys]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-encryption-decryption-menu [sign-region]
`(menu-item ,(purecopy "Sign Region") epa-sign-region
:help ,(purecopy "Decrypt the current region")))
(define-key menu-bar-encryption-decryption-menu [separator-file]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-encryption-decryption-menu [sign-file]
`(menu-item ,(purecopy "Sign File...") epa-sign-file
:help ,(purecopy "Invoke the Emacs built-in calendar")))
(define-key menu-bar-tools-menu [separator-net]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-tools-menu [directory-search]
`(menu-item ,(purecopy "Directory Search") eudc-tools-menu))
:visible (and mail-user-agent (not (eq mail-user-agent 'ignore)))
:help ,(purecopy "Send a mail message")))
(define-key menu-bar-tools-menu [rmail]
- `(menu-item (format "Read Mail (with %s)" (read-mail-item-name)) menu-bar-read-mail
- :visible (and read-mail-command (not (eq read-mail-command 'ignore)))
+ `(menu-item (format "Read Mail (with %s)" (read-mail-item-name))
+ menu-bar-read-mail
+ :visible (and read-mail-command
+ (not (eq read-mail-command 'ignore)))
:help ,(purecopy "Read your mail and reply to it")))
(defun menu-bar-read-mail ()
:help ,(purecopy "Read network news groups")))
(define-key menu-bar-tools-menu [separator-vc]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-tools-menu [pcl-cvs]
`(menu-item ,(purecopy "PCL-CVS") cvs-global-menu))
(define-key menu-bar-tools-menu [vc] nil) ;Create the place for the VC menu.
(define-key menu-bar-tools-menu [separator-compare]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-tools-menu [epatch]
`(menu-item ,(purecopy "Apply Patch") menu-bar-epatch-menu))
`(menu-item ,(purecopy "Compare (Ediff)") menu-bar-ediff-menu))
(define-key menu-bar-tools-menu [separator-spell]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-tools-menu [spell]
`(menu-item ,(purecopy "Spell Checking") ispell-menu-map))
(define-key menu-bar-tools-menu [separator-prog]
- '("--"))
+ menu-bar-separator)
+
+(define-key menu-bar-tools-menu [semantic]
+ `(menu-item ,(purecopy "Source Code Parsers (Semantic)")
+ semantic-mode
+ :help ,(purecopy "Toggle automatic parsing in source code buffers (Semantic mode)")
+ :button (:toggle . (bound-and-true-p semantic-mode))))
+
+(define-key menu-bar-tools-menu [ede]
+ `(menu-item ,(purecopy "Project support (EDE)")
+ global-ede-mode
+ :help ,(purecopy "Toggle the Emacs Development Environment (Global EDE mode)")
+ :button (:toggle . (bound-and-true-p global-ede-mode))))
(define-key menu-bar-tools-menu [gdb]
`(menu-item ,(purecopy "Debugger (GDB)...") gdb
,describe-language-environment-map))
(define-key menu-bar-describe-menu [separator-desc-mule]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-describe-menu [list-keybindings]
`(menu-item ,(purecopy "List Key Bindings") describe-bindings
`(menu-item ,(purecopy "Find Commands by Name...") apropos-command
:help ,(purecopy "Find commands whose names match a regexp")))
(define-key menu-bar-search-documentation-menu [sep1]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-search-documentation-menu [lookup-command-in-manual]
`(menu-item ,(purecopy "Look Up Command in User Manual...") Info-goto-emacs-command-node
:help ,(purecopy "Display manual section that describes a command")))
`(menu-item ,(purecopy "Read Man Page...") manual-entry
:help ,(purecopy "Man-page docs for external commands and libraries")))
(define-key menu-bar-manuals-menu [sep2]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-manuals-menu [order-emacs-manuals]
`(menu-item ,(purecopy "Ordering Manuals") view-order-manuals
:help ,(purecopy "How to order manuals from the Free Software Foundation")))
`(menu-item ,(purecopy "About Emacs") about-emacs
:help ,(purecopy "Display version number, copyright info, and basic help")))
(define-key menu-bar-help-menu [sep4]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-help-menu [describe-no-warranty]
`(menu-item ,(purecopy "(Non)Warranty") describe-no-warranty
:help ,(purecopy "Explain that Emacs has NO WARRANTY")))
data-directory))
(goto-address-mode 1)))
(define-key menu-bar-help-menu [sep2]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-help-menu [external-packages]
`(menu-item ,(purecopy "External Packages") menu-bar-help-extra-packages
:help ,(purecopy "Lisp packages distributed separately for use in Emacs")))
(define-key menu-bar-help-menu [search-documentation]
`(menu-item ,(purecopy "Search Documentation") ,menu-bar-search-documentation-menu))
(define-key menu-bar-help-menu [sep1]
- '("--"))
+ menu-bar-separator)
(define-key menu-bar-help-menu [emacs-psychotherapist]
`(menu-item ,(purecopy "Emacs Psychotherapist") doctor
:help ,(purecopy "Our doctor will help you feel better")))
;;nil means the buffer shouldn't be listed. You can redefine this."
;; (if (string-match "\\` " (buffer-name buffer))
;; nil
-;; (save-excursion
-;; (set-buffer buffer)
+;; (with-current-buffer buffer
;; (let ((size (buffer-size)))
;; (format "%s%s %-19s %6s %-15s %s"
;; (if (buffer-modified-p) "*" " ")
;; bug in keymap.c that I don't understand yet. -stef
minibuffer-local-completion-map))
(define-key map [menu-bar minibuf]
- (cons "Minibuf" (make-sparse-keymap "Minibuf"))))
+ (cons (purecopy "Minibuf") (make-sparse-keymap "Minibuf"))))
(let ((map minibuffer-local-completion-map))
(define-key map [menu-bar minibuf ?\?]
:help ,(purecopy "Abort input and exit minibuffer")))
(define-key map [menu-bar minibuf return]
`(menu-item ,(purecopy "Enter") exit-minibuffer
- :key-sequence "\r"
+ :key-sequence ,(purecopy "\r")
:help ,(purecopy "Terminate input and exit minibuffer")))
(define-key map [menu-bar minibuf isearch-forward]
`(menu-item ,(purecopy "Isearch History Forward") isearch-forward
;; Make the message appear when Emacs is idle. We can not call message
;; directly. The minor-mode message "Menu-bar mode disabled" comes
;; after this function returns, overwriting any message we do here.
- (when (and (interactive-p) (not menu-bar-mode))
+ (when (and (called-interactively-p 'interactive) (not menu-bar-mode))
(run-with-idle-timer 0 nil 'message
"Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear."))
menu-bar-mode)