diff options
Diffstat (limited to 'lisp/menu-bar.el')
-rw-r--r-- | lisp/menu-bar.el | 95 |
1 files changed, 60 insertions, 35 deletions
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 19c8bdd4e24..5ae5da9aff2 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -470,17 +470,14 @@ [paste-from-menu]) ;; ns-win.el said: Change text to be more consistent with ;; surrounding menu items `paste', etc." - `(menu-item ,(if (featurep 'ns) "Select and Paste" - "Paste from Kill Menu") yank-menu + `(menu-item ,(if (featurep 'ns) "Select and Paste" "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")) (bindings--define-key menu [paste] '(menu-item "Paste" yank :enable (and (or - ;; Emacs compiled --without-x (or --with-ns) - ;; doesn't have x-selection-exists-p. - (and (fboundp 'x-selection-exists-p) - (x-selection-exists-p 'CLIPBOARD)) + (gui-call gui-selection-exists-p 'CLIPBOARD) (if (featurep 'ns) ; like paste-from-menu (cdr yank-menu) kill-ring)) @@ -537,27 +534,26 @@ '(and mark-active (not buffer-read-only))) (put 'clipboard-kill-ring-save 'menu-enable 'mark-active) (put 'clipboard-yank 'menu-enable - '(and (or (not (fboundp 'x-selection-exists-p)) - (x-selection-exists-p) - (x-selection-exists-p 'CLIPBOARD)) + '(and (or (gui-call gui-selection-exists-p 'PRIMARY) + (gui-call gui-selection-exists-p 'CLIPBOARD)) (not buffer-read-only))) (defun clipboard-yank () "Insert the clipboard contents, or the last stretch of killed text." (interactive "*") - (let ((x-select-enable-clipboard t)) + (let ((gui-select-enable-clipboard t)) (yank))) (defun clipboard-kill-ring-save (beg end &optional region) - "Copy region to kill ring, and save in the X clipboard." + "Copy region to kill ring, and save in the GUI's clipboard." (interactive "r\np") - (let ((x-select-enable-clipboard t)) + (let ((gui-select-enable-clipboard t)) (kill-ring-save beg end region))) (defun clipboard-kill-region (beg end &optional region) - "Kill the region, and save it in the X clipboard." + "Kill the region, and save it in the GUI's clipboard." (interactive "r\np") - (let ((x-select-enable-clipboard t)) + (let ((gui-select-enable-clipboard t)) (kill-region beg end region))) (defun menu-bar-enable-clipboard () @@ -887,8 +883,33 @@ by \"Save Options\" in Custom buffers.") (interactive) (customize-set-variable 'scroll-bar-mode nil)) +(defun menu-bar-horizontal-scroll-bar () + "Display horizontal scroll bars on each window." + (interactive) + (customize-set-variable 'horizontal-scroll-bar-mode t)) + +(defun menu-bar-no-horizontal-scroll-bar () + "Turn off horizontal scroll bars." + (interactive) + (customize-set-variable 'horizontal-scroll-bar-mode nil)) + (defvar menu-bar-showhide-scroll-bar-menu (let ((menu (make-sparse-keymap "Scroll-bar"))) + (bindings--define-key menu [horizontal] + '(menu-item "Horizontal" + menu-bar-horizontal-scroll-bar + :help "Horizontal scroll bar" + :visible (horizontal-scroll-bars-available-p) + :button (:radio . (cdr (assq 'horizontal-scroll-bars + (frame-parameters)))))) + + (bindings--define-key menu [none-horizontal] + '(menu-item "None-horizontal" + menu-bar-no-horizontal-scroll-bar + :help "Turn off horizontal scroll bars" + :visible (horizontal-scroll-bars-available-p) + :button (:radio . (not (cdr (assq 'horizontal-scroll-bars + (frame-parameters))))))) (bindings--define-key menu [right] '(menu-item "On the Right" @@ -896,7 +917,8 @@ by \"Save Options\" in Custom buffers.") :help "Scroll-bar on the right side" :visible (display-graphic-p) :button (:radio . (eq (cdr (assq 'vertical-scroll-bars - (frame-parameters))) 'right)))) + (frame-parameters))) + 'right)))) (bindings--define-key menu [left] '(menu-item "On the Left" @@ -904,7 +926,8 @@ by \"Save Options\" in Custom buffers.") :help "Scroll-bar on the left side" :visible (display-graphic-p) :button (:radio . (eq (cdr (assq 'vertical-scroll-bars - (frame-parameters))) 'left)))) + (frame-parameters))) + 'left)))) (bindings--define-key menu [none] '(menu-item "None" @@ -912,7 +935,8 @@ by \"Save Options\" in Custom buffers.") :help "Turn off scroll-bar" :visible (display-graphic-p) :button (:radio . (eq (cdr (assq 'vertical-scroll-bars - (frame-parameters))) nil)))) + (frame-parameters))) + nil)))) menu)) (defun menu-bar-frame-for-menubar () @@ -1302,9 +1326,6 @@ mail status in mode line")) (bindings--define-key menu [life] '(menu-item "Life" life :help "Watch how John Conway's cellular automaton evolves")) - (bindings--define-key menu [land] - '(menu-item "Landmark" landmark - :help "Watch a neural-network robot learn landmarks")) (bindings--define-key menu [hanoi] '(menu-item "Towers of Hanoi" hanoi :help "Watch Towers-of-Hanoi puzzle solved by Emacs")) @@ -1958,11 +1979,10 @@ It must accept a buffer as its only required argument.") (dolist (pair alist) (setq i (1- i)) (aset buffers-vec i - (nconc (list (car pair) - (cons nil nil)) - `(lambda () - (interactive) - (funcall menu-bar-select-buffer-function ,(cdr pair)))))) + (cons (car pair) + `(lambda () + (interactive) + (funcall menu-bar-select-buffer-function ,(cdr pair)))))) (list buffers-vec)))) ;; Make a Frames menu if we have more than one frame. @@ -1974,10 +1994,8 @@ It must accept a buffer as its only required argument.") (i 0)) (dolist (frame frames) (aset frames-vec i - (nconc - (list - (frame-parameter frame 'name) - (cons nil nil)) + (cons + (frame-parameter frame 'name) `(lambda () (interactive) (menu-bar-select-frame ,frame)))) (setq i (1+ i))) @@ -2140,6 +2158,13 @@ See `menu-bar-mode' for more information." (declare-function x-menu-bar-open "term/x-win" (&optional frame)) (declare-function w32-menu-bar-open "term/w32-win" (&optional frame)) +(defun lookup-key-ignore-too-long (map key) + "Call `lookup-key' and convert numeric values to nil." + (let ((binding (lookup-key map key))) + (if (numberp binding) ; `too long' + nil + binding))) + (defun popup-menu (menu &optional position prefix from-menu-bar) "Popup the given menu and call the selected option. MENU can be a keymap, an easymenu-style menu or a list of keymaps as for @@ -2192,11 +2217,9 @@ FROM-MENU-BAR, if non-nil, means we are dropping one of menu-bar's menus." (let ((mouse-click (apply 'vector event)) binding) (while (and map (null binding)) - (setq binding (lookup-key (car map) mouse-click)) - (if (numberp binding) ; `too long' - (setq binding nil)) + (setq binding (lookup-key-ignore-too-long (car map) mouse-click)) (setq map (cdr map))) - binding)) + binding)) (t ;; We were given a single keymap. (lookup-key map (apply 'vector event))))) @@ -2276,8 +2299,10 @@ If FRAME is nil or not given, use the selected frame." (let* ((x tty-menu--initial-menu-x) (menu (menu-bar-menu-at-x-y x 0 frame))) (popup-menu (or - (lookup-key global-map (vector 'menu-bar menu)) - (lookup-key (current-local-map) (vector 'menu-bar menu)) + (lookup-key-ignore-too-long + global-map (vector 'menu-bar menu)) + (lookup-key-ignore-too-long + (current-local-map) (vector 'menu-bar menu)) (cdar (minor-mode-key-binding (vector 'menu-bar menu)))) (posn-at-x-y x 0 nil t) nil t))) (t (with-selected-frame (or frame (selected-frame)) |