-(define-key menu-bar-showhide-menu [showhide-scroll-bar]
- `(menu-item ,(purecopy "Scroll-bar") ,menu-bar-showhide-scroll-bar-menu
- :visible (display-graphic-p)))
-
-(define-key menu-bar-showhide-menu [showhide-tooltip-mode]
- `(menu-item ,(purecopy "Tooltips") tooltip-mode
- :help ,(purecopy "Turn tooltips on/off")
- :visible (and (display-graphic-p) (fboundp 'x-show-tip))
- :button (:toggle . tooltip-mode)))
-
-(define-key menu-bar-showhide-menu [menu-bar-mode]
- `(menu-item ,(purecopy "Menu-bar") toggle-menu-bar-mode-from-frame
- :help ,(purecopy "Turn menu-bar on/off")
- :button (:toggle . (> (frame-parameter nil 'menu-bar-lines) 0))))
-
-(define-key menu-bar-showhide-menu [showhide-tool-bar]
- `(menu-item ,(purecopy "Tool-bar") toggle-tool-bar-mode-from-frame
- :help ,(purecopy "Turn tool-bar on/off")
- :visible (display-graphic-p)
- :button (:toggle . (> (frame-parameter nil 'tool-bar-lines) 0))))
-
-(define-key menu-bar-options-menu [showhide]
- `(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,
- ;; because that makes a bootstrapping problem
- ;; if you need to recompile all the Lisp files using interpreted code.
- `(menu-item ,(purecopy "Mule (Multilingual Environment)") ,mule-menu-keymap
-;; Most of the MULE menu actually does make sense in unibyte mode,
-;; e.g. language selection.
-;;; :visible '(default-value 'enable-multibyte-characters)
- ))
-;(setq menu-bar-final-items (cons 'mule menu-bar-final-items))
-;(define-key menu-bar-options-menu [preferences]
-; `(menu-item ,(purecopy "Preferences") ,menu-bar-preferences-menu
-; :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 Quit/C-g" "Debug on Quit %s"
- "Enter Lisp debugger when C-g is pressed"))
-(define-key menu-bar-options-menu [debug-on-error]
- (menu-bar-make-toggle toggle-debug-on-error debug-on-error
- "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
- "Save Place in Files between Sessions"
- "Saving place in files %s"
- "Visit files of previous session when restarting Emacs"
- (require 'saveplace)
- ;; Do it by name, to avoid a free-variable
- ;; warning during byte compilation.
- (set-default
- 'save-place (not (symbol-value 'save-place)))))
-
-(define-key menu-bar-options-menu [uniquify]
- (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style
- "Use Directory Names in Buffer Names"
- "Directory name in buffer names (uniquify) %s"
- "Uniquify buffer names by adding parent directory names"
- (require 'uniquify)
- (setq uniquify-buffer-name-style
- (if (not uniquify-buffer-name-style)
- '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)"
- "Use C-z/C-x/C-c/C-v keys for undo/cut/copy/paste"
- (:visible (or (not (boundp 'cua-enable-cua-keys))
- cua-enable-cua-keys))))
-
-(define-key menu-bar-options-menu [cua-emulation-mode]
- (menu-bar-make-mm-toggle cua-mode
- "Shift movement mark region (CUA)"
- "Use shifted movement keys to set and extend the region."
- (:visible (and (boundp 'cua-enable-cua-keys)
- (not cua-enable-cua-keys)))))
-
-(define-key menu-bar-options-menu [case-fold-search]
- (menu-bar-make-toggle toggle-case-fold-search case-fold-search
- "Case-Insensitive Search"
- "Case-Insensitive Search %s"
- "Ignore letter-case in search commands"))
+(defvar menu-bar-showhide-scroll-bar-menu
+ (let ((menu (make-sparse-keymap "Scroll-bar")))
+
+ (bindings--define-key menu [right]
+ '(menu-item "On the Right"
+ menu-bar-right-scroll-bar
+ :help "Scroll-bar on the right side"
+ :visible (display-graphic-p)
+ :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
+ (frame-parameters))) 'right))))
+
+ (bindings--define-key menu [left]
+ '(menu-item "On the Left"
+ menu-bar-left-scroll-bar
+ :help "Scroll-bar on the left side"
+ :visible (display-graphic-p)
+ :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
+ (frame-parameters))) 'left))))
+
+ (bindings--define-key menu [none]
+ '(menu-item "None"
+ menu-bar-no-scroll-bar
+ :help "Turn off scroll-bar"
+ :visible (display-graphic-p)
+ :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
+ (frame-parameters))) nil))))
+ menu))
+
+(defun menu-bar-frame-for-menubar ()
+ "Return the frame suitable for updating the menu bar."
+ (or (and (framep menu-updating-frame)
+ menu-updating-frame)
+ (selected-frame)))
+
+(defun menu-bar-positive-p (val)
+ "Return non-nil iff VAL is a positive number."
+ (and (numberp val)
+ (> val 0)))
+
+(defun menu-bar-set-tool-bar-position (position)
+ (customize-set-variable 'tool-bar-mode t)
+ (customize-set-variable 'tool-bar-position position))
+(defun menu-bar-showhide-tool-bar-menu-customize-disable ()
+ "Do not display tool bars."
+ (interactive)
+ (customize-set-variable 'tool-bar-mode nil))
+(defun menu-bar-showhide-tool-bar-menu-customize-enable-left ()
+ "Display tool bars on the left side."
+ (interactive)
+ (menu-bar-set-tool-bar-position 'left))
+(defun menu-bar-showhide-tool-bar-menu-customize-enable-right ()
+ "Display tool bars on the right side."
+ (interactive)
+ (menu-bar-set-tool-bar-position 'right))
+(defun menu-bar-showhide-tool-bar-menu-customize-enable-top ()
+ "Display tool bars on the top side."
+ (interactive)
+ (menu-bar-set-tool-bar-position 'top))
+(defun menu-bar-showhide-tool-bar-menu-customize-enable-bottom ()
+ "Display tool bars on the bottom side."
+ (interactive)
+ (menu-bar-set-tool-bar-position 'bottom))
+
+(when (featurep 'move-toolbar)
+ (defvar menu-bar-showhide-tool-bar-menu
+ (let ((menu (make-sparse-keymap "Tool-bar")))
+
+ (bindings--define-key menu [showhide-tool-bar-left]
+ '(menu-item "On the Left"
+ menu-bar-showhide-tool-bar-menu-customize-enable-left
+ :help "Tool-bar at the left side"
+ :visible (display-graphic-p)
+ :button
+ (:radio . (and tool-bar-mode
+ (eq (frame-parameter
+ (menu-bar-frame-for-menubar)
+ 'tool-bar-position)
+ 'left)))))
+
+ (bindings--define-key menu [showhide-tool-bar-right]
+ '(menu-item "On the Right"
+ menu-bar-showhide-tool-bar-menu-customize-enable-right
+ :help "Tool-bar at the right side"
+ :visible (display-graphic-p)
+ :button
+ (:radio . (and tool-bar-mode
+ (eq (frame-parameter
+ (menu-bar-frame-for-menubar)
+ 'tool-bar-position)
+ 'right)))))
+
+ (bindings--define-key menu [showhide-tool-bar-bottom]
+ '(menu-item "On the Bottom"
+ menu-bar-showhide-tool-bar-menu-customize-enable-bottom
+ :help "Tool-bar at the bottom"
+ :visible (display-graphic-p)
+ :button
+ (:radio . (and tool-bar-mode
+ (eq (frame-parameter
+ (menu-bar-frame-for-menubar)
+ 'tool-bar-position)
+ 'bottom)))))
+
+ (bindings--define-key menu [showhide-tool-bar-top]
+ '(menu-item "On the Top"
+ menu-bar-showhide-tool-bar-menu-customize-enable-top
+ :help "Tool-bar at the top"
+ :visible (display-graphic-p)
+ :button
+ (:radio . (and tool-bar-mode
+ (eq (frame-parameter
+ (menu-bar-frame-for-menubar)
+ 'tool-bar-position)
+ 'top)))))
+
+ (bindings--define-key menu [showhide-tool-bar-none]
+ '(menu-item "None"
+ menu-bar-showhide-tool-bar-menu-customize-disable
+ :help "Turn tool-bar off"
+ :visible (display-graphic-p)
+ :button (:radio . (eq tool-bar-mode nil))))
+ menu)))
+
+(defvar menu-bar-showhide-menu
+ (let ((menu (make-sparse-keymap "Show/Hide")))
+
+ (bindings--define-key menu [column-number-mode]
+ (menu-bar-make-mm-toggle column-number-mode
+ "Column Numbers"
+ "Show the current column number in the mode line"))
+
+ (bindings--define-key menu [line-number-mode]
+ (menu-bar-make-mm-toggle line-number-mode
+ "Line Numbers"
+ "Show the current line number in the mode line"))
+
+ (bindings--define-key menu [size-indication-mode]
+ (menu-bar-make-mm-toggle size-indication-mode
+ "Size Indication"
+ "Show the size of the buffer in the mode line"))
+
+ (bindings--define-key menu [linecolumn-separator]
+ menu-bar-separator)
+
+ (bindings--define-key menu [showhide-battery]
+ (menu-bar-make-mm-toggle display-battery-mode
+ "Battery Status"
+ "Display battery status information in mode line"))
+
+ (bindings--define-key menu [showhide-date-time]
+ (menu-bar-make-mm-toggle display-time-mode
+ "Time, Load and Mail"
+ "Display time, system load averages and \
+mail status in mode line"))
+
+ (bindings--define-key menu [datetime-separator]
+ menu-bar-separator)
+
+ (bindings--define-key menu [showhide-speedbar]
+ '(menu-item "Speedbar" speedbar-frame-mode
+ :help "Display a Speedbar quick-navigation frame"
+ :button (:toggle
+ . (and (boundp 'speedbar-frame)
+ (frame-live-p (symbol-value 'speedbar-frame))
+ (frame-visible-p
+ (symbol-value 'speedbar-frame))))))
+
+ (bindings--define-key menu [showhide-fringe]
+ `(menu-item "Fringe" ,menu-bar-showhide-fringe-menu
+ :visible (display-graphic-p)))
+
+ (bindings--define-key menu [showhide-scroll-bar]
+ `(menu-item "Scroll-bar" ,menu-bar-showhide-scroll-bar-menu
+ :visible (display-graphic-p)))
+
+ (bindings--define-key menu [showhide-tooltip-mode]
+ '(menu-item "Tooltips" tooltip-mode
+ :help "Turn tooltips on/off"
+ :visible (and (display-graphic-p) (fboundp 'x-show-tip))
+ :button (:toggle . tooltip-mode)))
+
+ (bindings--define-key menu [menu-bar-mode]
+ '(menu-item "Menu-bar" toggle-menu-bar-mode-from-frame
+ :help "Turn menu-bar on/off"
+ :button
+ (:toggle . (menu-bar-positive-p
+ (frame-parameter (menu-bar-frame-for-menubar)
+ 'menu-bar-lines)))))
+
+ (if (and (boundp 'menu-bar-showhide-tool-bar-menu)
+ (keymapp menu-bar-showhide-tool-bar-menu))
+ (bindings--define-key menu [showhide-tool-bar]
+ `(menu-item "Tool-bar" ,menu-bar-showhide-tool-bar-menu
+ :visible (display-graphic-p)))
+ ;; else not tool bar that can move.
+ (bindings--define-key menu [showhide-tool-bar]
+ '(menu-item "Tool-bar" toggle-tool-bar-mode-from-frame
+ :help "Turn tool-bar on/off"
+ :visible (display-graphic-p)
+ :button
+ (:toggle . (menu-bar-positive-p
+ (frame-parameter (menu-bar-frame-for-menubar)
+ 'tool-bar-lines))))))
+ menu))