;; The "File" menu items
(define-key menu-bar-file-menu [exit-emacs]
'(menu-item "Exit Emacs" save-buffers-kill-emacs
+ :keys "C-x C-c"
:help "Save unsaved buffers, then exit"))
(define-key menu-bar-file-menu [separator-exit]
(define-key menu-bar-edit-menu [mark-whole-buffer]
'(menu-item "Select All" mark-whole-buffer
- :help "Mark the whole buffer for a subsequent cut/copy."))
+ :help "Mark the whole buffer for a subsequent cut/copy"))
(define-key menu-bar-edit-menu [clear]
'(menu-item "Clear" delete-region
:enable (and mark-active
(defvar yank-menu (cons "Select Yank" nil))
(fset 'yank-menu (cons 'keymap yank-menu))
(define-key menu-bar-edit-menu [paste-from-menu]
- '(menu-item "Paste from kill menu" yank-menu
+ '(menu-item "Paste from Kill Menu" yank-menu
:enable (and (cdr yank-menu) (not buffer-read-only))
:help "Choose a string from the kill ring and paste it"))
(define-key menu-bar-edit-menu [paste]
:button (:toggle . (and (default-boundp ',variable)
(default-value ',variable))))))
+;; Function for setting/saving default font.
+
+(defun menu-set-font ()
+ "Interactively select a font and make it the default."
+ (interactive)
+ (let ((font (if (fboundp 'x-select-font)
+ (x-select-font)
+ (mouse-select-font)))
+ spec)
+ (when font
+ (set-face-attribute 'default nil :font font)
+ (setq spec (list (list t (face-attr-construct 'default))))
+ (put 'default 'customized-face spec)
+ (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]
(list 'menu-item "Customize Emacs" menu-bar-custom-menu))
(and (get elt 'customized-value)
(customize-mark-to-save elt)
(setq need-save t)))
+ (when (get 'default 'customized-face)
+ (put 'default 'saved-face (get 'default 'customized-face))
+ (put 'default 'customized-face nil)
+ (setq need-save t))
;; Save if we changed anything.
(when need-save
(custom-save-all))))
(define-key menu-bar-options-menu [custom-separator]
'("--"))
-(define-key menu-bar-options-menu [mouse-set-font]
- '(menu-item "Set Font/Fontset..." mouse-set-font
- :visible (display-multi-font-p)
- :help "Select a font from list of known fonts/fontsets"))
+(define-key menu-bar-options-menu [menu-set-font]
+ '(menu-item "Set Default Font..." menu-set-font
+ :visible (display-multi-font-p)
+ :help "Select a default font"))
;; The "Show/Hide" submenu of menu "Options"
(define-key menu-bar-showhide-menu [showhide-tool-bar]
(list 'menu-item "Tool-bar" 'toggle-tool-bar-mode-from-frame
- :help "Toggle tool-bar on/off"
+ :help "Turn tool-bar on/off"
:visible `(display-graphic-p)
:button `(:toggle . (> (frame-parameter nil 'tool-bar-lines) 0))))
(menu-bar-make-toggle toggle-case-fold-search case-fold-search
"Case-Insensitive Search"
"Case-Insensitive Search %s"
- "Globally ignore letter-case in search"))
+ "Ignore letter-case in search commands"))
(defun menu-bar-text-mode-auto-fill ()
(interactive)
(customize-mark-as-set 'text-mode-hook))
(define-key menu-bar-options-menu [auto-fill-mode]
- '(menu-item "Word Wrap in Text Modes"
+ '(menu-item "Auto Fill in Text Modes"
menu-bar-text-mode-auto-fill
- :help "Automatically fill text between left and right margins (Auto Fill)"
+ :help "Automatically fill text while typing (Auto Fill mode)"
:button (:toggle . (if (listp text-mode-hook)
(member 'turn-on-auto-fill text-mode-hook)
(eq 'turn-on-auto-fill text-mode-hook)))))
-(define-key menu-bar-options-menu [truncate-lines]
- '(menu-item "Truncate Long Lines in this Buffer"
- toggle-truncate-lines
- :help "Truncate long lines on the screen"
- :button (:toggle . (if (or (window-full-width-p)
- (not truncate-partial-width-windows))
- truncate-lines
- truncate-partial-width-windows))
- :enable (and (menu-bar-menu-frame-live-and-visible-p)
- (or (window-full-width-p)
- (not truncate-partial-width-windows)))))
+
+
+(defvar menu-bar-line-wrapping-menu (make-sparse-keymap "Line Wrapping"))
+
+(define-key menu-bar-line-wrapping-menu [word-wrap]
+ '(menu-item "Word Wrap (Visual Line mode)"
+ (lambda ()
+ (interactive)
+ (unless visual-line-mode
+ (visual-line-mode 1))
+ (message "Visual-Line mode enabled"))
+ :help "Wrap long lines at word boundaries"
+ :button (:radio . (and (null truncate-lines)
+ (not (truncated-partial-width-window-p))
+ word-wrap))
+ :visible (menu-bar-menu-frame-live-and-visible-p)))
+
+(define-key menu-bar-line-wrapping-menu [truncate]
+ '(menu-item "Truncate Long Lines"
+ (lambda ()
+ (interactive)
+ (if visual-line-mode (visual-line-mode 0))
+ (setq word-wrap nil)
+ (toggle-truncate-lines 1))
+ :help "Truncate long lines at window edge"
+ :button (:radio . (or truncate-lines
+ (truncated-partial-width-window-p)))
+ :visible (menu-bar-menu-frame-live-and-visible-p)
+ :enable (not (truncated-partial-width-window-p))))
+
+(define-key menu-bar-line-wrapping-menu [window-wrap]
+ '(menu-item "Wrap at Window Edge"
+ (lambda () (interactive)
+ (if visual-line-mode (visual-line-mode 0))
+ (setq word-wrap nil)
+ (if truncate-lines (toggle-truncate-lines -1)))
+ :help "Wrap long lines at window edge"
+ :button (:radio . (and (null truncate-lines)
+ (not (truncated-partial-width-window-p))
+ (not word-wrap)))
+ :visible (menu-bar-menu-frame-live-and-visible-p)
+ :enable (not (truncated-partial-width-window-p))))
+
+(define-key menu-bar-options-menu [line-wrapping]
+ (list 'menu-item "Line Wrapping in this Buffer" menu-bar-line-wrapping-menu))
+
(define-key menu-bar-options-menu [highlight-separator]
'("--"))
(define-key menu-bar-describe-menu [list-keybindings]
'(menu-item "List Key Bindings" describe-bindings
- :help "Display all current keybindings (keyboard shortcuts)"))
+ :help "Display all current key bindings (keyboard shortcuts)"))
(define-key menu-bar-describe-menu [describe-current-display-table]
'(menu-item "Describe Display Table" describe-current-display-table
:help "Describe the current display table"))
'(menu-item "Ordering Manuals" view-order-manuals
:help "How to order manuals from the Free Software Foundation"))
(define-key menu-bar-manuals-menu [lookup-subject-in-all-manuals]
- '(menu-item "Lookup Subject in all manuals..." info-apropos
+ '(menu-item "Lookup Subject in all Manuals..." info-apropos
:help "Find description of a subject in all installed manuals"))
(define-key menu-bar-manuals-menu [other-manuals]
'(menu-item "All Other Manuals (Info)" Info-directory
:help "Show the Emacs license (GPL)"))
(define-key menu-bar-help-menu [getting-new-versions]
'(menu-item "Getting New Versions" describe-distribution
- :help "How to get latest versions of Emacs"))
+ :help "How to get the latest version of Emacs"))
(defun menu-bar-help-extra-packages ()
"Display help about some additional packages available for Emacs."
(interactive)
(> count 1)))
(defcustom yank-menu-length 20
- "*Maximum length to display in the yank-menu."
+ "Maximum length to display in the yank-menu."
:type 'integer
:group 'menu)
;;; Buffers Menu
(defcustom buffers-menu-max-size 10
- "*Maximum number of entries which may appear on the Buffers menu.
+ "Maximum number of entries which may appear on the Buffers menu.
If this is 10, then only the ten most-recently-selected buffers are shown.
If this is nil, then all buffers are shown.
A large number or nil slows down menu responsiveness."
:group 'menu)
(defcustom buffers-menu-buffer-name-length 30
- "*Maximum length of the buffer name on the Buffers menu.
+ "Maximum length of the buffer name on the Buffers menu.
If this is a number, then buffer names are truncated to this length.
If this is nil, then buffer names are shown in full.
A large number or nil makes the menu too wide."
(defvar list-buffers-directory nil)
+(defun menu-bar-select-buffer ()
+ (interactive)
+ (switch-to-buffer last-command-event))
+
(defun menu-bar-select-frame (frame)
(make-frame-visible frame)
(raise-frame frame)
(menu-bar-mode arg)))
(declare-function x-menu-bar-open "term/x-win" (&optional frame))
+(declare-function w32-menu-bar-open "term/w32-win" (&optional frame))
(defun menu-bar-open (&optional frame)
"Start key navigation of the menu bar in FRAME.
This function decides which method to use to access the menu
depending on FRAME's terminal device. On X displays, it calls
-`x-menu-bar-open'; otherwise it calls `tmm-menubar'.
+`x-menu-bar-open'; on Windows, `w32-menu-bar-open' otherwise it
+calls `tmm-menubar'.
If FRAME is nil or not given, use the selected frame."
(interactive)
- (if (eq window-system 'x)
- (x-menu-bar-open frame)
- (with-selected-frame (or frame (selected-frame))
- (tmm-menubar))))
+ (let ((type (framep (or frame (selected-frame)))))
+ (cond
+ ((eq type 'x) (x-menu-bar-open frame))
+ ((eq type 'w32) (w32-menu-bar-open frame))
+ (t (with-selected-frame (or frame (selected-frame))
+ (tmm-menubar))))))
(global-set-key [f10] 'menu-bar-open)