handlename's blog

コード片など

highlight-symbolとhydraを組み合わせると捗る

Awesome Emacsという 便利packageリンク集があるのを知って眺めていたら、 表題のhighlight-symbolhydraを組み合わせてみたら捗るんじゃないかと 思って組み合わせてみたらやっぱり捗りそうな感じだったのでメモしておく。

highlight-symbolとは

名前の通りコード内の同一シンボル(と思われるもの)をハイライトしてくれるツール

hydraとは

関連するコマンドを複数定義して、 それらのコマンドを連続して簡単に呼び出せるようにするツール

捗る設定

init.elに以下のように書いて、評価して、

(global-set-key
 (kbd "C-x H")
 (defhydra hydra-highlight-symbol
   (:post (progn
        (highlight-symbol-remove-all)))
   "highlight-symbol"
   ("." highlight-symbol-at-point "highlight")
   ("n" highlight-symbol-next "next")
   ("p" highlight-symbol-prev "prev")
   ("N" highlight-symbol-next-in-defun "next in defun")
   ("P" highlight-symbol-prev-in-defun "prev in defun")))

C-x Hとタイプすれば各コマンド(この場合.npNP)が使えるモードになる。 (「モード」という呼び方が正しいのかどうかは知らない)

C-x Hとタイプした後は各コマンドを単体で連続して使える。 つまりnnnとタイプすれば次々とシンボルをたどることができる。

定義されているキーバインド以外を入力するとこのモードから抜ける。 :postを設定して、抜けるときにハイライトを解除するようにしている。

よくわからないと思うのでスクリーンキャストをどうぞ:

録画の都合上emacs起動時からになっているので半分くらい起動を待つ時間になっております:p 録画用に軽い設定を用意すればいいのかもしれない。 asciinema初めて使ってみたけど便利。

・・・抜けるときにハイライトが解除されてないことに気づいちゃった人もいると思いますが、 なんでかターミナルで動かすとhighlight-symbol-remove-allが効かないんです。 普段はEmacs.appを使っていてそちらでは問題ないので深追いはしない。

hydraのREADMEに載っているzoomやGoto-errorは普通に便利そうなので後で試す。

追記 2015-02-20 10:00

Emacs.appの方でもhighlight-symbol-remove-allが効かなくなっていた・・・ 別のパッケージと干渉している可能性もある? あとで調べる。