ファイル編集中に本文中にあるURLっぽいものを目立たせたいな、ついでにクリックでブラウザを開けたらイイナ、ってことはよくある。そんなときはgoto-address-mode
を利用するのが良い。
つまりは、こんなパターン。

一時的に有効化したい
M-x goto-address-mode
またはM-x goto-address-prog-mode
を実行する。
若干わかりにくいけど、Emacs内でブラウザウィジェット使ってるわけじゃなくて、デスクトップの標準Webブラウザ(Chrome)が開いてるだけ。
常に有効化したい
.emacsファイル(~/.emacs.d/init.el
)で、prog-mode-hook
とかtext-mode-hook
に登録してやればいい。
;; goto-addr
(progn
(add-hook 'prog-mode-hook 'goto-address-prog-mode)
(add-hook 'text-mode-hook 'goto-address-mode))
goto-address-prog-mode
はgoto-address-mode
と概ね同じなのだけれど、コメントとか文字列リテラルに含まれるURLだけをリンクにしてくれる。
Emacsのメジャーモードには継承の概念があって、「プログラミング言語のソースコードっぽいもの」を編集するモードはprog-mode
を、「人間がそのまま読み書きするようなテキスト文書っぽいもの」を編集するモードはtext-mode
を継承するのがお作法になってゐる。
つまりprog-mode-hook
に設定してやれば、ruby-mode
とかphp-mode
とかの個別のhookに設定しなくて良い。(逆に、全体で反映したくないが個別のモードでのみ有効化したけれはruby-mode-hook
などに登録する)
goto-address-mode
は何をしてくれるのか
ざっくり
- URLっぽい文字列をみつけて、リンクっぽい色を付けてくれる
- 正確には
link
って名前のfaceを付ける - 興味あるひとは
M-x list-faces-display
で確認してみてね
- 正確には
- そのリンクをクリックしたら
goto-address-at-point
コマンドが実行されるようになる - 参考: Emacs25.1マニュアル日本語版 48.2 URLのアクティブ化
goto-address-at-point
はカーソル位置のURLっぽいものを検出してbrowse-url
してるだけなのでgoto-address-mode
とは関係なく、いつでも実行できる。
つまり「色付けとかクリックとかどうでもいいから」って人はgoto-address-mode
を有効化せずにgoto-address-at-point
だけを使ってもいい。
ちなみにhelm-find-file
でもいける
もしHelmを使ってたら、カーソルがURL上にある状態でC-x C-f (またはM-x helm-find-files
) するだけで同じような挙動になる。
Helmを使ってなくても、Emacs標準にあるFFAP(find-file-at-point
)を利用すれば同じようになります。(たぶん)
蛇足: ターミナルからリンクを開く
ターミナルの種類にもよるが、筆者が愛用してるiTerm2はCommandを押すと、画面中のURLっぽい文字列がクリック可能になる。特にSSHで接続した先でEmacsを使ってる最中にGUIのブラウザで開きたい、といった場合はこうするのが簡単。
リンクをクリックしたときの挙動を制御したい
先述の通りbrowse-url
してるだけなので、設定してやればいいだけ。
例として、Emacs内で完結したい場合はこうする。
(setq browse-url-browser-function #'eww-browse-url)
まとめ
-
goto-address-mode
はURLをクリックできるようになってべんりだよ - せっかく最新版のEmacsマニュアルの和訳があるので読まないと損だよ
- 通読するのは大変だけど、目次から気になる項目をつまんで読んでおくと良い