#:g1: M-gを活用しよう

Posted 2014-12-23 15:00:00 GMT

(Emacs Advent Calendar 2014参加エントリ)

 Emacs Advent Calendar 2014の24日目です。

 Emacs 24では、M-g は goto-map のプレフィックスキーになっています。
はて、こんなkeymapがあったのかなと思ったのですが、M-g gにgoto-lineがアサインされていたりして、昔からありそうな雰囲気です。

 雰囲気だけではなんなので、一応、実際そうなのか調べてみたところ、doc/lispref/ChangeLogには、

2009-03-28  Chong Yidong  <cyd@stupidchicken.com>

* modes.texi (Major Mode Conventions): Note that specialness is inherited. (Derived Modes): Note that define-derive-mode sets the mode-class property.

* keymaps.texi (Prefix Keys): The M-g prefix key is now named goto-map. Add search-map to the list.

とありました。
時期からするとgoto-mapがEmacsに入ったのはEmacs 23.1からのようでEmacsの歴史からすれば、比較的最近のようです。

 ちなみに、goto-line自体は、gnu emacsが誕生した頃からあるようで、キーバインドは、C-cgか、C-xgだったようです。そういえばそうだったそうな記憶も。

 そんなgoto-mapですが、どんなものが登録されているかというと、Emacs 24のデフォルトでは、

と、5つしかありません。
ということで、比較的押しやすい位置にありつつ、活用されていないのはもったい無いので活用してみようというのが今回のテーマです。

どっかに飛んで行くコマンドを考える

 goto-mapなので、どっかに飛んで行くようなコマンドが良さそうですが、何が良いでしょうか。
デフォルトのコマンドだと、指定したコラムに飛んで行く、指定した位置の文字に飛んでいく、指定した行に飛んでいく、前後のエラーに飛んでいく、位です。

 頭を捻って適当に隙間を埋めてみましょう。

ブラウザでURLを開く

(define-key goto-map [?b] #'browse-url-at-point)

 他のキーバインドか便利ユーティリティで開くことが多いかと思いますが、M-g bとかでも便利かなと。

スクラッチファイルを開く

(define-key goto-map [?s] #'open-foo...)

 スクラッチファイルを開くようなコマンドでも良さそうです。

マニュアルを参照する

(define-key goto-map [?↑]
  (lambda ()
    (interactive)
    (browse-url
     (format "http://practical-scheme.net/gauche/man/?l=jp&p=%s"
             (thing-at-point 'symbol)))))

 大抵プログラミング言語のモードにはマニュアルを参照するコマンドは備え付けかなと思いますが、補助的に参照したいものなどに良いのではないでしょうか。

何かの一覧モードを開く

(define-key goto-map [(shift ?b)] #'bookmark-bmenu-list)
(define-key goto-map [?r] #'recentf-open-files)

 何かの一覧を開く時にも使えそうではあります。helmとかanythingを使っている人には無用な気もしますが…。

良く使うディレクトリを開く

(define-key goto-map [?t]
  (lambda ()
    (interactive)
    (dired "/tmp/")))

 これも他の機能で間に合っている気もしますが、もの凄い回数開いたり閉じたりする場合には、固定のキーバインドがあっても悪くはないかなと思います。

まとめ

 以上、M-gのgoto-mapの隙間を有効活用する方法を考えてみました。
ぱっとしたものは提案できませんでしたが、きっと何か便利な応用があるのではないでしょうか。

comments powered by Disqus