(define-minor-mode): A nil argument to the minor mode turns the mode ON.
[bpt/emacs.git] / lisp / menu-bar.el
index fda31c0..d831744 100644 (file)
@@ -1,7 +1,7 @@
 ;;; 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
@@ -61,6 +61,9 @@
 ;; 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]
@@ -68,7 +71,7 @@
              :help ,(purecopy "Save unsaved buffers, then exit")))
 
 (define-key menu-bar-file-menu [separator-exit]
-  `(menu-item ,(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
   `(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))
@@ -561,7 +564,7 @@ Do the same for the keys of the same name."
   `(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")))
@@ -572,7 +575,7 @@ Do the same for the keys of the same name."
   `(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")))
@@ -580,7 +583,7 @@ Do the same for the keys of the same name."
   `(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")))
@@ -597,10 +600,10 @@ DOC is the text to use for the menu entry.
 HELP is the text to use for the tooltip.
 PROPS are additional properties."
   `(list 'menu-item  (purecopy ,doc) ',fname
-        ,@props
-        ':help (purecopy ,help)
-        ':button '(:toggle . (and (default-boundp ',fname)
-                                  (default-value ',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
@@ -624,9 +627,9 @@ by \"Save Options\" in Custom buffers.")
        ;; the user have already set explicitly in his init file.
        (if interactively (customize-mark-as-set ',variable)))
      (list 'menu-item (purecopy ,doc) ',name
-                ':help (purecopy ,help)
-                 ':button '(:toggle . (and (default-boundp ',variable)
-                                        (default-value ',variable))))))
+          :help (purecopy ,help)
+          :button '(:toggle . (and (default-boundp ',variable)
+                                   (default-value ',variable))))))
 
 ;; Function for setting/saving default font.
 
@@ -657,6 +660,8 @@ by \"Save Options\" in Custom buffers.")
       (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))
@@ -678,7 +683,7 @@ by \"Save Options\" in Custom buffers.")
                   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
@@ -703,13 +708,21 @@ by \"Save Options\" in Custom buffers.")
              :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"))
@@ -730,7 +743,7 @@ by \"Save Options\" in Custom buffers.")
                           "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
@@ -744,7 +757,7 @@ by \"Save Options\" in Custom buffers.")
 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
@@ -972,7 +985,7 @@ mail status in mode line"))
   `(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,
@@ -989,7 +1002,7 @@ mail status in mode line"))
 ;            :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
@@ -1000,14 +1013,14 @@ mail status in mode line"))
                        "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
@@ -1031,7 +1044,7 @@ mail status in mode line"))
                                  '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)"
@@ -1077,7 +1090,7 @@ mail status in mode line"))
                (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))
@@ -1115,7 +1128,7 @@ mail status in mode line"))
 
 
 (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"
@@ -1155,7 +1168,7 @@ mail status in mode line"))
   `(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
@@ -1204,7 +1217,7 @@ mail status in mode line"))
   `(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
@@ -1227,7 +1240,7 @@ mail status in mode line"))
              :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
@@ -1246,7 +1259,7 @@ mail status in mode line"))
              :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
@@ -1275,7 +1288,7 @@ mail status in mode line"))
              :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))
@@ -1284,8 +1297,10 @@ mail status in mode line"))
              :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 ()
@@ -1298,14 +1313,14 @@ mail status in mode line"))
              :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))
@@ -1315,13 +1330,25 @@ mail status in mode line"))
   `(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
@@ -1365,7 +1392,7 @@ mail status in mode line"))
              ,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
@@ -1437,7 +1464,7 @@ key, a click, or a menu-item")))
   `(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")))
@@ -1460,7 +1487,7 @@ key, a click, or a menu-item")))
   `(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")))
@@ -1473,7 +1500,7 @@ key, a click, or a menu-item")))
 (define-key menu-bar-manuals-menu [emacs-lisp-reference]
   `(menu-item ,(purecopy "Emacs Lisp Reference") menu-bar-read-lispref
              :help ,(purecopy "Read the Emacs Lisp Reference manual")))
-(define-key menu-bar-manuals-menu [emac-lisp-intro]
+(define-key menu-bar-manuals-menu [emacs-lisp-intro]
   `(menu-item ,(purecopy "Introduction to Emacs Lisp") menu-bar-read-lispintro
              :help ,(purecopy "Read the Introduction to Emacs Lisp Programming")))
 
@@ -1484,7 +1511,7 @@ key, a click, or a menu-item")))
   `(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")))
@@ -1502,7 +1529,7 @@ key, a click, or a menu-item")))
                                 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")))
@@ -1519,7 +1546,7 @@ key, a click, or a menu-item")))
 (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")))
@@ -1842,8 +1869,7 @@ Buffers menu is regenerated."
 ;;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) "*" " ")
@@ -1879,7 +1905,7 @@ Buffers menu is regenerated."
                :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