From c5fbec3e04c5e4ef641ff8f99d9c2a58f3c8a770 Mon Sep 17 00:00:00 2001 From: Philip Kaludercic Date: Fri, 31 Dec 2021 15:21:13 +0100 Subject: [PATCH 3/3] Add command to invoke a search engine * mouse.el (context-menu-online-search): Add new function (eww-search-prefix): Declare variable from eww.el (mouse-online-search-at-point): Add new command --- lisp/mouse.el | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lisp/mouse.el b/lisp/mouse.el index 11fdd3f639..edf4504bdd 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -523,6 +523,16 @@ context-menu-ffap :help "Find file or URL from text around mouse click")))) menu) +(defun context-menu-online-search (menu click) + "Populate MENU with command to search online." + (save-excursion + (mouse-set-point click) + (define-key-after menu [online-search-separator] menu-bar-separator) + (define-key-after menu [online-search-at-mouse] + '(menu-item "Online search" mouse-online-search-at-point + :help "Search for region or word online"))) + menu) + (defvar context-menu-entry `(menu-item ,(purecopy "Context Menu") ,(make-sparse-keymap) :filter ,(lambda (_) (context-menu-map))) @@ -3209,6 +3219,26 @@ mouse-drag-and-drop-region (with-current-buffer (window-buffer window) (setq cursor-type (nth 3 state))))))) +(defvar eww-search-prefix) +(defun mouse-online-search-at-point (event) + "Query an online search engine at EVENT. +If a region is active, the entire region will be sent, otherwise +the symbol at point will be used. This command uses EWW's +default search engine, as configured by `eww-search-prefix'." + (interactive "e") + (require 'eww) + (let ((query (if (use-region-p) + (buffer-substring (region-beginning) + (region-end)) + (save-excursion + (mouse-set-point event) + (thing-at-point 'symbol))))) + (unless query + (user-error "Nothing to search for")) + (browse-url (concat + eww-search-prefix + (mapconcat #'url-hexify-string (split-string query) "+"))))) + ;;; Bindings for mouse commands. -- 2.34.0