Emacsの単語をブラウザで検索
Emacs でコードとか読んでると Google で検索したくなることはよくあるので,方法をいろいろ調べてみた.
anything-c-source-surfraw
1つが anything-c-source-surfraw.anything をインストールしている Emacs なら,sudo apt-get install surfraw で surfraw をインストールして,M-x anything-surfraw で使える.
試してみたが,複雑な検索を簡単に行うことはできても,検索までにいろいろ入力が必要で,いつも Google で検索する私にはちょい面倒.
あと,別のサーチエンジンを追加するには surfraw 側を弄る必要があるらしいのだが,そこがさっぱりわからなかったので断念.
anything-c-source-surfraw の詳細を知りたければ,以下が詳しいので参考に.
emacs からサーチエンジンの検索結果を呼び出す anything-c-source-surfraw の紹介 - わからん
search-web.el
もう1つ,search-web.el を見つけた.こちらは手軽に検索できて,サーチエンジンの追加も簡単.
Emacs ですぐに単語の検索をしたい欲望を叶える Elisp。 - 日々、とんは語る。
search-web.el ではリージョン検索と付近の単語検索で関数を分けているが,transient-mark-mode 時にはリージョンを,そうでないときは付近の単語を検索する方が便利.
あと,現在のバージョンの search-web.el では,キーバインド一発検索が設定できない.
ということで,.emacsに以下を追加.
(require 'search-web) (define-prefix-command 'search-web-map) (global-set-key (kbd "M-i") 'search-web-map) (global-set-key (kbd "M-i g") (lambda () (interactive) (search-web-dwim "google"))) (global-set-key (kbd "M-i M-i") (lambda () (interactive) (search-web-dwim))) (defun search-web-dwim (&optional arg-engine) "transient-mark-mode がオンの時はリージョンを, オフの時はカーソル位置の単語を検索する." (interactive) (cond ((transient-region-active-p) (search-web-region arg-engine)) (t (search-web-at-point arg-engine))))
さらに,search-web.el の search-web-at-point と search-web-region を以下に書き換え.
(defun search-web-at-point (&optional arg-engine) (interactive) (message "sw: %s" arg-engine) (let* ((completion-ignore-case t) (search-word (substring-no-properties (thing-at-point 'word))) (engine (or arg-engine (completing-read (format "[%s] Search Engine: " search-word) (make-search-engine-name-list) nil t)))) (search-web engine search-word))) (defun search-web-region (&optional arg-engine) (interactive) (let* ((completion-ignore-case t) (beg (mark)) (end (point)) (search-word (buffer-substring-no-properties beg end)) (engine (or arg-engine (completing-read (format "[%s] Search Engine: " search-word) (make-search-engine-name-list) nil t)))) (search-web engine search-word)))