Firefox と Emacs の会話

Emacs から Google 検索

Meadow/Emacs memo で紹介されている google.elgoogle2.el を利用する。M-x google でカレントバッファのカーソル付近の単語を検索語として Google 検索に渡すが、リージョン選択で検索語を指定することも出来る。内部で browse-url.el を使用しているので Mac では例えば次のように設定しておく。

;; for browse-url
(setq browse-url-browser-function 'browse-url-generic)
(setq browse-url-generic-program "open") ; default browser で開く

検索エンジンも Google に限らず、YouTube や Wikipedia, Google ブック検索, CiNii など適宜カスタマイズして追加できる。例えば Amazon で Emacs 関連の商品を検索する場合、

https://skalldan.files.wordpress.com/2011/10/wpid-amazon_emacs.png

というように検索したい語のリージョンを指定すると (この場合 “Emacs”)、mini-buffer に検索ワードのデフォルトとして表示される。このまま Return を押すと Lead2Amazon での検索結果がデフォルトのブラウザ (Firefox) で表示される。

https://skalldan.files.wordpress.com/2011/10/wpid-amazon_firefox.png

Firefox の拡張 Zotero を利用すれば素早く文献情報を保存でき、BibTeX 形式で再度 Emacs に情報をエクスポートすることもできる (以前の記事 参照)。Emacs で編集中に気にかかった文献を Firefox で検索、見つかった文献情報を Emacs が受け取り編集作業を再開する、という会話が成り立つ。

https://skalldan.files.wordpress.com/2011/10/wpid-amazon_emacs_firefox2.png

Emacs から Firefox を操作

まず Firefox を Telnet で操作するための MozRepl という拡張を有効にしておく (簡単な導入方法は ここ に書いた)。次に moz.el をインストールして次のような設定を追加しておく。

(autoload 'moz-minor-mode "moz" "Mozilla Minor and Inferior Mozilla Modes" t)
(moz-minor-mode t)

(defun moz-send-message (moz-command)
  (comint-send-string
   (inferior-moz-process)
   (concat moz-repl-name ".pushenv('printPrompt', 'inputMode'); "
           moz-repl-name ".setenv('inputMode', 'line'); "
           moz-repl-name ".setenv('printPrompt', false); undefined; "))
  (comint-send-string
   (inferior-moz-process)
   (concat moz-command
           moz-repl-name ".popenv('inputMode', 'printPrompt'); undefined;n")))

(defun moz-scrolldown ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollLineDown');n")) ; 下スクロール
;; (global-set-key (kbd "C-M-n") 'moz-scrolldown)

(defun moz-scrollup ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollLineUp');n")) ; 上スクロール
;; (global-set-key (kbd "C-M-p") 'moz-scrollup)

;; ... (適宜追加) ...

この他にも「進む」(BrowserForward) や「戻る」(BrowserBack) など適宜必要な動作を同様にして追加すればよい。このように操作して何が便利かというと、例えば、マルチディスプレイで作業している場合は、メインディスプレイにある Emacs からスイッチせずに外部ディスプレイに表示させている Firefox を操作できる。また、シングルディスプレイでも Carbon Emacs や Cocoa Emacs などではフルスクリーンで透過した背景を利用できるので (FullScreen, TransparentEmacs)、Emacs の背面にある Firefox を確認しながら作業することができるが (この状態に慣れるとまるで Firefox が Mac の壁紙のようになる…)、その際に Emacs から切り替えることなく Firefox のスクロール、タブの切替、ページのリロードなどが可能であると非常に便利である1

https://skalldan.files.wordpress.com/2011/10/wpid-alpha_firefox.png

ちなみに、こうして透明な画面にしていると Emacs で編集作業をしながら裏の Firefox で動画を流しておく、なんていう怠けた使い方もできる。もちろん ScreenCast や Ustream 配信などを見ながらメモを取る、といった実際的な使用法もある。

https://skalldan.files.wordpress.com/2011/10/wpid-mizuhara_intel.png

Firefox のページを org-capture で Bookmark

OrgMode and Firefox conversations という記事の内容に従うと問題なく可能だった (Org 7.4, Emacs 22.3)。

C-c c (org-capture) で Org-Capture の選択画面を呼び出して、

https://skalldan.files.wordpress.com/2011/10/wpid-org-capture-select.png

[b] で Bookmark を選択すると、現在 Firefox で開かれているページの情報がテンプレートとして挿入されるので、適宜メモを残す。

https://skalldan.files.wordpress.com/2011/10/wpid-org-capture-bookmark.png

この状態で C-c C-c (org-capture-finalize) で保存し完了する2

Firefox のページを emacs-w3m で開く

先ほどの Justin Kirby さんの記事 の通り設定した場合 org-capture の設定でも利用した jk/moz-url という関数が定義されているので、これを利用する。

(defun moz-url-w3m ()
  "Open current page of Firefox on emacs-w3m."
  (interactive)
  (w3m-browse-url (jk/moz-url)))
;; (global-set-key (kbd "C-cW") 'moz-url-w3m)

Firefox の拡張 Firemacskeysnail を利用すれば Firefox 上でほとんど Emacs のようなキーバインディングが利用できるが、編集作業を行う場合 Emacs 内であるに越したことはない。私は普段の Web 閲覧は Firefox だが、じっくり読みたいページや内容をコピーしたいページがあれば M-x moz-url-w3m (C-c W に充てている) を実行して emacs-w3m 内での閲覧に切り替えている。

Footnotes:

1 tlync さんのブログ にはより詳しい設定方法が、また saito さんのブログ では Emacs-lisp と Ruby と mozrepl を使用して Firefox を操作する方法が、hnw さんの日記 では Emacs+Firefox+MozRepl でファイルセーブと同時にリロードする方法が、それぞれ丁寧に説明されている。また、rubikitch さんのページで、MozRepl を利用したシェルスクリプト fresno の紹介や 独自のソース (mozeval) が公開されている。

2 ただし、タイトルが日本語のページの場合文字化けしてしまうので取得するのは URL のみにしておいた。

また、同様のことは org-protocol.el を利用してできるだろうが、org-mac-protocol をインストールしてみた結果うまく動かなかった。同ページにはサポートされているアプリケーションのリストに Firefox があげられているが (同梱の org-mac-protocol manual には Firefox は限定的サポートと書いてある) … ひとまず保留しておく。

About these ads

One thought on “Firefox と Emacs の会話

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s