写配置看到了 webjump,可以定义一些搜索链接,选择预置的链接,输入关键字进行搜索(利用 brower-url)。
我觉得用来搜索 point 下的内容也挺好的,就糊了个简单函数,用来搜索 symbol-at-point 的内容,例如用 Kagi 搜索、Kagi 翻译、搜索 GitHub、MDN 等常用文档。
不知道有没有已经存在的包实现了类似功能,没怎么找,有的话也欢迎分享。
效果:

更新:
- 因为是获取 point 下的内容进行操作,很适合结合 embark 一起完成,例如我将
embark-act绑定到了C-.,那么我的操作就是:
- 找到想要操作的内容(region/symbol)
C-.调用embark-actW(我将函数绑定到了embark-general-map中的W,就可以调用函数搜索了
- 增加了 Kagi Assistant 的 URL,调用的时候需要简单输入一些 prompt,然后会去到 Kagi Assistant 页面调用 LLM 回答问题

代码:
webjump
(use-package webjump
:after embark
:defer nil
:config
(setq webjump-sites '(("Kagi" . [simple-query "kagi.com" "kagi.com/search?q=" ""])
("Kagi Translate Text" . [simple-query "translate.kagi.com" "translate.kagi.com/?from=auto&to=zh_cn&text=" ""])
("Kagi Translate Page" . [simple-query "translate.kagi.com" "translate.kagi.com/zh_cn/" "?kt_view=both_vertical?kt_view=both_vertical"])
("Kagi LLM" . [simple-query "kagi.com" "kagi.com/assistant?q=" "&profile=kimi-k2.5-reasoning&internet=on"])
("Wikipedia" . [simple-query "wikipedia.org" "wikipedia.org/wiki/" ""])
("Kagi(site:github.com)" . [simple-query "kagi.com" "kagi.com/search?q=site:github.com+" ""])
("Album" . [simple-query "kagi.com" "kagi.com/images?q=" "&size=large"])
("MDN" . [simple-query "developer.mozilla.org" "developer.mozilla.org/en-US/search?q=" ""])
("Haici" . [simple-query "dict.cn" "dict.cn/search?q=" ""])))
(defun spike-leung/webjump-symbol-at-point (target)
"获取光标下的 symbol 并通过 webjump 搜索。TARGET 是 `embark-act' 的对象。"
(let* ((completion-ignore-case t)
;; 从 WebJump 列表选项
(item (assoc-string
(completing-read "WebJump to site: " webjump-sites nil t)
webjump-sites t))
;; 选项名称
(name (car item))
;; 选项配置
(expr (cdr item))
;; 选项的第 3 个参数,获取查询前缀
(query-prefix (aref expr 2))
;; 选项的第 4 个参数,获取查询后缀
(query-suffix (aref expr 3))
(fun (if webjump-use-internal-browser
(apply-partially #'browse-url-with-browser-kind 'internal)
#'browse-url))
;; 如果选择的是 LLM 相关的 URL,则需要输入 Prompt
(prompt (and (string-match-p "LLM" name) (read-string "Prompt: " "解释" t)))
;; 如果存在 prompt 则拼接 prompt
(query (or (and prompt (concat target "\n" prompt)) target)))
(funcall fun (webjump-url-fix
(cond ((concat query-prefix (webjump-url-encode query) query-suffix))
(t (error "WebJump URL expression for \"%s\" invalid"
name))))))))
embark
(use-package embark
:bind
(("C-." . embark-act)
("M-." . embark-dwim)
("C-h B" . embark-bindings)) ;; alternative for `describe-bindings'
:init
;; Optionally replace the key help with a completing-read interface
(setq prefix-help-command #'embark-prefix-help-command)
:config
(keymap-set embark-general-map "W" #'spike-leung/webjump-symbol-at-point)
(keymap-set embark-region-map "W" #'spike-leung/webjump-symbol-at-point))
还有一些杂七杂八的记录在了博客里:Emacs: 封装 webjump 搜索 symbol-at-point
关于 Kagi,我认为它的搜索是有一定优势的,集成到 Emacs 里方便触发也挺好。 关于 Kagi:也许你想试试 Kagi?