当选中一个区别之后,可以绑定一些键进行选区的操作。我的配置如下:
(use-package selected
:load-path "packages/selected.el/"
:hook (post-select-region . selected-minor-mode)
:bind (:map selected-keymap
("q" . selected-off)
("u" . upcase-region)
("d" . downcase-region)
("c" . kill-ring-save)
("x" . kill-region)
("w" . count-words-region)
("s" . my/search)
("t" . my/gts-do-translate)
("m" . apply-macro-to-region-lines)
("\\" . indent-region)
(";" . comment-dwim)))
my/search 的内容如下:
(setq my/browser-engines
'((DoubanMovie . "https://search.douban.com/movie/subject_search?search_text=")
(DoubanBook . "https://search.douban.com/book/subject_search?search_text=")
(Zhihu . "https://www.zhihu.com/search?type=content&q=")
(Google . "https://www.google.com/search?q=")
(Scholar . "https://scholar.google.com/scholar?hl=zh-CN&as_sdt=0%2C33&q=")
(Github . "github.com/search?q=")
(Youtube . "http://www.youtube.com/results?aq=f&oq=&search_query=")))
;;;###autoload
(defun my/search ()
"Search using the specified engine for the text in the currently selected region or user input."
(interactive)
(let* ((selected-engine (completing-read "Choose a search engine: " (mapcar 'car my/browser-engines) nil t))
(selected-url (cdr (assoc (intern selected-engine) my/browser-engines))))
(let* ((region (if (region-active-p)
(buffer-substring-no-properties (region-beginning) (region-end))
(read-string "Enter search terms: ")))
(encoded-region (url-encode-url region))
(search-url (concat selected-url encoded-region)))
(browse-url search-url)))
(when (region-active-p)
(deactivate-mark)))
流程示例:比如 Telega 关注了一些影视频道,有时候看到电影名想知道这个电影怎样,就选中电影名然后按“s”,调用 DoubanMovie 查看下评分和影评。原先的操作需要选中区域、复制区域,使用 webjump 选用 doubanmovie 再粘贴复制的内容进行搜索,略显复杂。