From 89c31342a735c631b93ef7d75f3b0672e83f9e95 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Fri, 20 Aug 2021 12:03:20 +0200 Subject: [PATCH] Use C-mouse-1 for context menu on NS The Mac platform convention is to use control-left-click for context menus (as a synonym to right-click). * lisp/mouse.el (context-menu--old-bindings): Remove. (context-menu--saved-bindings) (context-menu--bind-mouse, context-menu--reset-bindings): New. (context-menu-mode): Use new functions, with C-mouse-1 as extra binding on NS. --- lisp/mouse.el | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/lisp/mouse.el b/lisp/mouse.el index d2a5200d8de..4dcc2f28f4a 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -440,8 +440,28 @@ the same menu with changes such as added new menu items." `(menu-item ,(purecopy "Context Menu") ignore :filter (lambda (_) (context-menu-map)))) -(defvar context-menu--old-down-mouse-3 nil) -(defvar context-menu--old-mouse-3 nil) +(defvar context-menu--saved-bindings nil + "Alist of bindings to restore when `context-menu-mode' is disabled.") + +(defun context-menu--bind-mouse (click-sym down-sym) + "Enable `context-menu-mode' mouse bindings. +CLICK-SYM and DOWN-SYM are the mouse click and down key symbols to use." + (let ((click (vector click-sym)) + (down (vector down-sym))) + (push (cons click-sym (global-key-binding click)) + context-menu--saved-bindings) + (global-unset-key click) + (push (cons down-sym (global-key-binding down)) + context-menu--saved-bindings) + (global-set-key down context-menu-entry))) + +(defun context-menu--reset-bindings () + "Restore saved `context-menu-mode' bindings." + (pcase-dolist (`(sym . binding) context-menu--saved-bindings) + (let ((key (vector sym))) + (if binding + (global-set-key key binding) + (global-unset-key key))))) (define-minor-mode context-menu-mode "Toggle Context Menu mode. @@ -449,20 +469,13 @@ the same menu with changes such as added new menu items." When Context Menu mode is enabled, clicking the mouse button down-mouse-3 activates the menu whose contents depends on its surrounding context." :global t :group 'mouse - (cond - (context-menu-mode - (setq context-menu--old-mouse-3 (global-key-binding [mouse-3])) - (global-unset-key [mouse-3]) - (setq context-menu--old-down-mouse-3 (global-key-binding [down-mouse-3])) - (global-set-key [down-mouse-3] context-menu-entry)) - (t - (if (not context-menu--old-down-mouse-3) - (global-unset-key [down-mouse-3]) - (global-set-key [down-mouse-3] context-menu--old-down-mouse-3) - (setq context-menu--old-down-mouse-3 nil)) - (when context-menu--old-mouse-3 - (global-set-key [mouse-3] context-menu--old-mouse-3) - (setq context-menu--old-mouse-3 nil))))) + (if context-menu-mode + (progn + (setq context-menu--saved-bindings nil) + (context-menu--bind-mouse 'mouse-3 'down-mouse-3) + (when (featurep 'ns) + (context-menu--bind-mouse 'C-mouse-1 'C-down-mouse-1))) + (context-menu--restore-bindings))) ;; Commands that operate on windows. -- 2.39.5