URLっぽいものを開く/強調表示する

  • 5
    いいね
  • 0
    コメント

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

つまりは、こんなパターン。

コメント中にURLが含まれてるようす

一時的に有効化したい

M-x goto-address-modeまたはM-x goto-address-prog-modeを実行する。

goto-addr.gif

若干わかりにくいけど、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-modegoto-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) するだけで同じような挙動になる。

goto-addr-2.gif

Helmを使ってなくても、Emacs標準にあるFFAP(find-file-at-point)を利用すれば同じようになります。(たぶん)

蛇足: ターミナルからリンクを開く

ターミナルの種類にもよるが、筆者が愛用してるiTerm2Commandを押すと、画面中のURLっぽい文字列がクリック可能になる。特にSSHで接続した先でEmacsを使ってる最中にGUIのブラウザで開きたい、といった場合はこうするのが簡単。

goto-addr-iterm2.gif

リンクをクリックしたときの挙動を制御したい

先述の通りbrowse-urlしてるだけなので、設定してやればいいだけ。
例として、Emacs内で完結したい場合はこうする。

(setq browse-url-browser-function #'eww-browse-url)

goto-addr-internal.gif

まとめ

  • goto-address-modeはURLをクリックできるようになってべんりだよ
  • せっかく最新版のEmacsマニュアルの和訳があるので読まないと損だよ
    • 通読するのは大変だけど、目次から気になる項目をつまんで読んでおくと良い