(define-minor-mode): A nil argument to the minor mode turns the mode ON.
[bpt/emacs.git] / lisp / menu-bar.el
index 5ba4b24..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
 ;; 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)
@@ -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]
-  (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))
@@ -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")))
@@ -596,11 +599,11 @@ FNAME is the minor mode's name (variable and function).
 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
@@ -623,10 +626,10 @@ by \"Save Options\" in Custom buffers.")
        ;; 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.
 
@@ -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) "*" " ")
@@ -1860,7 +1886,7 @@ Buffers menu is regenerated."
                   ;; 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 ?\?]
@@ -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