]> git.eshelyaron.com Git - emacs.git/commitdiff
Add docstrings to context menu functions, and add middle-separator
authorJuri Linkov <juri@linkov.net>
Wed, 15 Sep 2021 16:00:56 +0000 (19:00 +0300)
committerJuri Linkov <juri@linkov.net>
Wed, 15 Sep 2021 16:00:56 +0000 (19:00 +0300)
* lisp/mouse.el (context-menu-functions): Add context-menu-middle-separator
to default values.
(context-menu-middle-separator): New function.

* lisp/replace.el (occur-context-menu): Use middle-separator.

* lisp/progmodes/elisp-mode.el (elisp-context-menu):
* lisp/progmodes/prog-mode.el (prog-context-menu):
Use middle-separator and reorder menu items correspondingly.

lisp/dired.el
lisp/help-mode.el
lisp/info.el
lisp/mouse.el
lisp/net/dictionary.el
lisp/net/eww.el
lisp/net/goto-addr.el
lisp/progmodes/elisp-mode.el
lisp/progmodes/prog-mode.el
lisp/replace.el

index 1ed83cb95a763688570682e3990d0f651757568f..9978d027a98d1eea0cfc6ea69c4a9c43051ba13c 100644 (file)
@@ -2194,6 +2194,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
      :help "Delete image tag from current or marked files"]))
 
 (defun dired-context-menu (menu click)
+  "Populate MENU with Dired mode commands at CLICK."
   (when (mouse-posn-property (event-start click) 'dired-filename)
     (define-key menu [dired-separator] menu-bar-separator)
     (let ((easy-menu (make-sparse-keymap "Immediate")))
index d341b4c9e4a8b73ec43ee285e308bf0a79bf1f9c..d2066a05f7d7add886ea845bcea27a53cb0b5f65 100644 (file)
@@ -71,6 +71,7 @@
      :help "Customize variable or face"]))
 
 (defun help-mode-context-menu (menu click)
+  "Populate MENU with Help mode commands at CLICK."
   (define-key menu [help-mode-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Help-Mode")))
     (easy-menu-define nil easy-menu nil
index b861fff744c3878ea92baacb816fefbc94d19b04..8c08eaec3c8cd54fa152418ebb548a0e22543f25 100644 (file)
@@ -4152,6 +4152,7 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
    ["Exit" quit-window :help "Stop reading Info"]))
 
 (defun Info-context-menu (menu click)
+  "Populate MENU with Info commands at CLICK."
   (define-key menu [Info-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Info")))
     (easy-menu-define nil easy-menu nil
index c107322815af9bb6409c15c9eb276b16ce8543eb..f33a73f03ffc1c95cf54d1f6f9e97be5d20b7ffc 100644 (file)
@@ -281,6 +281,7 @@ not it is actually displayed."
 
 (defcustom context-menu-functions '(context-menu-undo
                                     context-menu-region
+                                    context-menu-middle-separator
                                     context-menu-local
                                     context-menu-minor)
   "List of functions that produce the contents of the context menu.
@@ -305,11 +306,19 @@ and should return the same menu with changes such as added new menu items."
   :version "28.1")
 
 (defun context-menu-map (&optional click)
-  "Return composite menu map."
+  "Return menu map constructed for context near mouse CLICK.
+The menu is populated by calling functions from `context-menu-functions'.
+Each function receives the menu and the mouse click event
+and returns the same menu after adding own menu items to the composite menu.
+When there is a text property `context-menu-function' at CLICK,
+it overrides all functions from `context-menu-functions'.
+At the end, it's possible to modify the final menu by specifying
+the function `context-menu-filter-function'."
   (let* ((menu (make-sparse-keymap (propertize "Context Menu" 'hide t)))
          (click (or click last-input-event))
          (fun (mouse-posn-property (event-start click)
                                    'context-menu-function)))
+
     (if (functionp fun)
         (setq menu (funcall fun menu click))
       (run-hook-wrapped 'context-menu-functions
@@ -329,8 +338,14 @@ and should return the same menu with changes such as added new menu items."
       (setq menu (funcall context-menu-filter-function menu click)))
     menu))
 
+(defun context-menu-middle-separator (menu _click)
+  "Add separator to the middle of the context menu.
+Some context functions add menu items below the separator."
+  (define-key-after menu [middle-separator] menu-bar-separator)
+  menu)
+
 (defun context-menu-toolbar (menu _click)
-  "Tool bar menu items."
+  "Populate MENU with submenus from the tool bar."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-toolbar] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -341,7 +356,7 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-global (menu _click)
-  "Global submenus."
+  "Populate MENU with submenus from the global menu."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-global] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -352,7 +367,7 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-local (menu _click)
-  "Major mode submenus."
+  "Populate MENU with submenus provided by major mode."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-local] menu-bar-separator)
   (let ((keymap (local-key-binding [menu-bar])))
@@ -365,7 +380,7 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-minor (menu _click)
-  "Minor modes submenus."
+  "Populate MENU with submenus provided by minor modes."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-minor] menu-bar-separator)
   (dolist (mode (reverse (minor-mode-key-binding [menu-bar])))
@@ -378,7 +393,7 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-buffers (menu _click)
-  "Submenus with buffers."
+  "Populate MENU with the buffer submenus to buffer switching."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-buffers] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -389,13 +404,13 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-vc (menu _click)
-  "Version Control menu."
+  "Populate MENU with Version Control commands."
   (define-key-after menu [separator-vc] menu-bar-separator)
   (define-key-after menu [vc-menu] vc-menu-entry)
   menu)
 
 (defun context-menu-undo (menu _click)
-  "Undo menu."
+  "Populate MENU with undo commands."
   (define-key-after menu [separator-undo] menu-bar-separator)
   (when (and (not buffer-read-only)
              (not (eq t buffer-undo-list))
@@ -413,7 +428,7 @@ and should return the same menu with changes such as added new menu items."
   menu)
 
 (defun context-menu-region (menu _click)
-  "Region commands menu."
+  "Populate MENU with region commands."
   (define-key-after menu [separator-region] menu-bar-separator)
   (when (and mark-active (not buffer-read-only))
     (define-key-after menu [cut]
@@ -451,26 +466,27 @@ and should return the same menu with changes such as added new menu items."
     (define-key-after menu [clear]
       '(menu-item "Clear" delete-active-region
                   :help
-                  "Delete the text in region between mark and current position")))
+                  "Delete text in region between mark and current position")))
   (define-key-after menu [mark-whole-buffer]
     '(menu-item "Select All" mark-whole-buffer
                 :help "Mark the whole buffer for a subsequent cut/copy"))
   menu)
 
 (defun context-menu-ffap (menu click)
-  "File at point menu."
+  "Populate MENU with commands that find file at point."
   (save-excursion
     (mouse-set-point click)
     (when (ffap-guess-file-name-at-point)
       (define-key menu [ffap-separator] menu-bar-separator)
       (define-key menu [ffap-at-mouse]
         '(menu-item "Find File or URL" ffap-at-mouse
-                    :help "Find file or URL guessed from text around mouse click"))))
+                    :help "Find file or URL from text around mouse click"))))
   menu)
 
 (defvar context-menu-entry
   `(menu-item ,(purecopy "Context Menu") ignore
-              :filter (lambda (_) (context-menu-map))))
+              :filter (lambda (_) (context-menu-map)))
+  "Menu item that creates the context menu and can be bound to a mouse key.")
 
 (defvar context-menu-mode-map
   (let ((map (make-sparse-keymap)))
index 9353b4d3759870a3c069e89eaf597598ab708f2c..4947caba69987c019f2c5f71b0df25cff0769d67 100644 (file)
@@ -1376,7 +1376,7 @@ any buffer where (dictionary-tooltip-mode 1) has been called."
     (dictionary-search word)))
 
 (defun context-menu-dictionary (menu click)
-  "Dictionary context menu."
+  "Populate MENU with dictionary commands at CLICK."
   (when (thing-at-mouse click 'word)
     (define-key menu [dictionary-separator] menu-bar-separator)
     (define-key menu [dictionary-search-word-at-mouse]
index 16a13bbaaee07c0337886b316e19fe6eaffb29bf..28569eeeb10c3f19a1bcb922c16e0482f189edf7 100644 (file)
@@ -1027,6 +1027,7 @@ the like."
     map))
 
 (defun eww-context-menu (menu click)
+  "Populate MENU with eww commands at CLICK."
   (define-key menu [eww-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Eww")))
     (easy-menu-define nil easy-menu nil
index 97230f42fe844a7867aea7e115aa5c70235fcdd9..78f6f3d915bff7115c7040a1a2db6eff2c9c7068 100644 (file)
@@ -125,6 +125,7 @@ will have no effect.")
   "Keymap to hold goto-addr's mouse key defs under highlighted URLs.")
 
 (defun goto-address-context-menu (menu click)
+  "Populate MENU with goto-address commands at CLICK."
   (when (mouse-posn-property (event-start click) 'goto-address)
     (define-key menu [goto-address-separator] menu-bar-separator)
     (define-key menu [goto-address-at-mouse]
index f71718bed52bc41e4532f4889107718534e46366..55325ef488bedb461eea2f87a92a7a6ee8a95aab 100644 (file)
@@ -154,23 +154,24 @@ All commands in `lisp-mode-shared-map' are inherited by this map.")
      :selected (bound-and-true-p eldoc-mode)]))
 
 (defun elisp-context-menu (menu click)
+  "Populate MENU with symbol help commands at CLICK."
   (when (thing-at-mouse click 'symbol)
     (define-key-after menu [elisp-separator] menu-bar-separator
-      'mark-whole-buffer)
+      'middle-separator)
+    (define-key-after menu [info-lookup-symbol]
+      '(menu-item "Look up Symbol"
+                  (lambda (click) (interactive "e")
+                    (info-lookup-symbol
+                     (intern (thing-at-mouse click 'symbol t))))
+                  :help "Display definition in relevant manual")
+      'elisp-separator)
     (define-key-after menu [describe-symbol]
       '(menu-item "Describe Symbol"
                   (lambda (click) (interactive "e")
                     (describe-symbol
                      (intern (thing-at-mouse click 'symbol t))))
                   :help "Display the full documentation of symbol")
-      'elisp-separator)
-    (define-key-after menu [info-lookup-symbol]
-      '(menu-item "Lookup Symbol"
-                  (lambda (click) (interactive "e")
-                    (info-lookup-symbol
-                     (intern (thing-at-mouse click 'symbol t))))
-                  :help "Display definition in relevant manual")
-      'describe-symbol))
+      'elisp-separator))
   menu)
 
 (defun emacs-lisp-byte-compile ()
index bd2c653638869d20a038b6aa3e45a9c66b97ae2e..88d55a647c891f5e50cb00b79c1ff8bebeb2153e 100644 (file)
                                 prettify-symbols-mode))
 
 (defun prog-context-menu (menu click)
+  "Populate MENU with xref commands at CLICK."
   (require 'xref)
   (define-key-after menu [prog-separator] menu-bar-separator
-    'mark-whole-buffer)
+    'middle-separator)
+  (when (not (xref-marker-stack-empty-p))
+    (define-key-after menu [xref-pop]
+      '(menu-item "Back Definition" xref-pop-marker-stack
+                  :help "Back to the position of the last search")
+      'prog-separator))
   (when (save-excursion
           (mouse-set-point click)
           (xref-backend-identifier-at-point
            (xref-find-backend)))
-    (define-key-after menu [xref-find-def]
-      '(menu-item "Find Definition" xref-find-definitions-at-mouse
-                  :help "Find definition of identifier")
+    (define-key-after menu [xref-find-ref]
+      '(menu-item "Find References" xref-find-references-at-mouse
+                  :help "Find references to identifier")
       'prog-separator))
   (when (save-excursion
           (mouse-set-point click)
           (xref-backend-identifier-at-point
            (xref-find-backend)))
-    (define-key-after menu [xref-find-ref]
-      '(menu-item "Find References" xref-find-references-at-mouse
-                  :help "Find references to identifier")
-      'xref-find-def))
-  (when (not (xref-marker-stack-empty-p))
-    (define-key-after menu [xref-pop]
-      '(menu-item "Back Definition" xref-pop-marker-stack
-                  :help "Back to the position of the last search")
-      'xref-find-ref))
+    (define-key-after menu [xref-find-def]
+      '(menu-item "Find Definition" xref-find-definitions-at-mouse
+                  :help "Find definition of identifier")
+      'prog-separator))
   menu)
 
 (defvar prog-mode-map
index 63b58c9b454725f9fae495477e004fd8ca4d091f..947da8a2feb101ed28f06e10759907750c74de5b 100644 (file)
@@ -2380,13 +2380,13 @@ See also `multi-occur'."
     (occur (concat "\\_<" (regexp-quote symbol) "\\_>"))))
 
 (defun occur-context-menu (menu click)
-  "Populate MENU with occur commands for CLICK.
+  "Populate MENU with occur commands at CLICK.
 To be added to `context-menu-functions'."
   (let ((word (thing-at-mouse click 'word))
         (sym (thing-at-mouse click 'symbol)))
     (when (or word sym)
       (define-key-after menu [occur-separator] menu-bar-separator
-        'mark-whole-buffer)
+        'middle-separator)
       (when sym
         (define-key-after menu [occur-symbol-at-mouse]
           '(menu-item "Occur Symbol" occur-symbol-at-mouse)