From 77c080476a6e64ab9ae5717e75c2358d3e8d20a7 Mon Sep 17 00:00:00 2001 From: Philip Kaludercic Date: Sun, 12 Sep 2021 21:02:46 +0200 Subject: [PATCH] Add occur-related context-menu operations * replace.el (occur-word-at-mouse): Add new command (occur-symbol-at-mouse): Add new command (occur-context-menu): Add new function --- lisp/replace.el | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lisp/replace.el b/lisp/replace.el index 69bdfe1331..e8ca3fac80 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -2367,6 +2367,31 @@ occur-context-lines ;; And the second element is the list of context after-lines. (if (> nlines 0) after-lines)))) +(defun occur-word-at-mouse (event) + "Display an occur buffer for the word at EVENT." + (interactive "e") + (occur (thing-at-mouse event 'word t))) + +(defun occur-symbol-at-mouse (event) + "Display an occur buffer for the symbol at EVENT." + (interactive "e") + (occur (thing-at-mouse event 'symbol t))) + +(defun occur-context-menu (menu click) + "Populate MENU with occur commands for 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) + (when word + (define-key-after menu [occur-word-at-mouse] + '(menu-item "Occur Word" occur-word-at-mouse))) + (when sym + (define-key-after menu [occur-symbol-at-mouse] + '(menu-item "Occur Symbol" occur-symbol-at-mouse))))) + menu) + ;; It would be nice to use \\[...], but there is no reasonable way ;; to make that display both SPC and Y. -- 2.30.2