summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2021-09-12 20:32:02 +0300
committerJuri Linkov <juri@linkov.net>2021-09-12 20:32:02 +0300
commitbd917088e69e71e77c15069f0751096141ca3f1a (patch)
tree149567f8d3e8e74662c85a708500cd49121c591d /lisp
parent4877ddeaf739af3a683d8686d1e2fa5e51960623 (diff)
downloademacs-bd917088e69e71e77c15069f0751096141ca3f1a.tar.gz
emacs-bd917088e69e71e77c15069f0751096141ca3f1a.tar.bz2
emacs-bd917088e69e71e77c15069f0751096141ca3f1a.zip
* lisp/thingatpt.el (thing-at-mouse): New function (bug#50256).
* lisp/net/dictionary.el: Add 'context-menu-dictionary' to 'context-menu-functions'. (dictionary-search-word-at-mouse): New function. (context-menu-dictionary): New function that uses 'thing-at-mouse'. (dictionary-mouse-popup-matching-words): Remove stray 'selected-window'. * lisp/textmodes/flyspell.el (flyspell-context-menu): Add '_click' arg.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/dictionary.el22
-rw-r--r--lisp/textmodes/flyspell.el2
-rw-r--r--lisp/thingatpt.el9
3 files changed, 31 insertions, 2 deletions
diff --git a/lisp/net/dictionary.el b/lisp/net/dictionary.el
index 0f42af0911b..5a6f3b555d2 100644
--- a/lisp/net/dictionary.el
+++ b/lisp/net/dictionary.el
@@ -1211,7 +1211,6 @@ allows editing it."
(save-excursion
(mouse-set-point event)
(current-word)))))
- (selected-window)
(dictionary-popup-matching-words word)))
;;;###autoload
@@ -1368,5 +1367,26 @@ any buffer where (dictionary-tooltip-mode 1) has been called."
(if on #'dictionary-tooltip-track-mouse #'ignore))
on))
+;;; Context menu support
+
+(defun dictionary-search-word-at-mouse (event)
+ (interactive "e")
+ (let ((word (save-window-excursion
+ (save-excursion
+ (mouse-set-point event)
+ (current-word)))))
+ (dictionary-search word)))
+
+(defun context-menu-dictionary (menu click)
+ "Dictionary context menu."
+ (when (thing-at-mouse click 'word)
+ (define-key menu [dictionary-separator] menu-bar-separator)
+ (define-key menu [dictionary-search-word-at-mouse]
+ '(menu-item "Dictionary Search" dictionary-search-word-at-mouse
+ :help "Search the word at mouse click in dictionary")))
+ menu)
+
+(add-hook 'context-menu-functions 'context-menu-dictionary 15)
+
(provide 'dictionary)
;;; dictionary.el ends here
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 975f540936a..423f37762cf 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -470,7 +470,7 @@ See also `flyspell-duplicate-distance'."
(defvar flyspell-overlay nil)
-(defun flyspell-context-menu (_menu)
+(defun flyspell-context-menu (_menu _click)
"Context menu for `context-menu-mode'."
;; TODO: refactor `flyspell-correct-word' and related functions to return
;; a keymap menu where every menu item is bound to a lambda that calls
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index ab17748df5b..8782c9eeb56 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -152,6 +152,15 @@ positions of the thing found."
(cons real-beg end))))))))))
;;;###autoload
+(defun thing-at-mouse (event thing &optional no-properties)
+ "Return the THING at mouse click.
+Like `thing-at-point', but tries to use the event
+where the mouse button is clicked to find a thing nearby."
+ (save-excursion
+ (mouse-set-point event)
+ (thing-at-point thing no-properties)))
+
+;;;###autoload
(defun thing-at-point (thing &optional no-properties)
"Return the THING at point.
THING should be a symbol specifying a type of syntactic entity.