読者です 読者をやめる 読者になる 読者になる

Emacsでバッファ内容を目視確認して目的のバッファに素早く切り替える

Emacs e2wm.el

私は、バッファ切り替えには、通常、anything.el/helm.elを使っています。
これらを使うことで、どれだけ多くのバッファが生成されていても、切り替えにはほとんど時間がかかりません。

ただし、これは目的のバッファ名が明確にイメージされている場合に限ります。
例えば、シェルやgrepやmoccurなどのバッファは、
バッファ名から目的のバッファを特定するのは難しいのではと思います。
以前、それらのバッファ名に、生成時のクエリや作業目的などを入れる試みもしたのですが、
わかりやすい情報を入れるのが難しかったり、作業する内にバッファ名と内容が剥離してしまったりで、
結局断念していました。

e2wm.elが使えた

OSの機能で、Alt+Tabで各アプリケーションを目視しながら切り替えれますが、
同じようなことができないかなぁと、それ以来、時々悶々としていたのですが、
最近、何気なくe2wm.elのarrayパースペクティブを試してみたら、
あれ?これって正に僕がしたかったことができているのでは...と(今更)気づいてしまいました。

arrayパースペクティブは、全バッファを眺めるためのものという認識で必要に感じる場面がなく、
それまで全く使っていませんでしたが、調べてみると並べるバッファは
e2wm:dp-array-buffers-function を設定することで、ユーザ側でカスタマイズができるんですね。

何これ、チョー使えるじゃないですか!!
という訳で、moccurバッファだけを並べてみたのが、以下。
ついでに、pophint.elを連携させて、 ヒント選択でバッファ切り替えができるようにしました。

f:id:aki2o:20140819070214p:plain

設定について

e2wm:start-managementせずに使う

e2wm:dp-array をグローバルマップに割り当てて、いつでも上記の切り替えができるようにしようとしたら、
e2wm:start-management していないと挙動がおかしくなってしまいました。
e2wm.elのウィンドウ管理はとても快適ですが、常時有功にしている訳ではなかったので、
e2wm:start-management しないでも、 e2wm:dp-array できるパッチを本家に送ったら取り込んでもらえました。

なので、私と同じ使い方をしたい方は、e2wm.elを最新に更新すると良いです。
私は、以下のようにして使っています。

(global-set-key (kbd "C-x C-S-b") 'e2wm:dp-array)

同じモードのバッファだけ並べる

ファイルに紐づいていないバッファの場合には、同じメジャーモードのバッファだけを抽出する関数を
作成し、これも本家に取り込んでもらえました。
なので、同じことがしたければ、e2wm.elを最新にして以下の設定をすれば良いです。

(setq e2wm:c-array-smart-buffers-functions
      '(e2wm:dp-array-get-same-mode-buffers-if-not-recordable))

pophint.elとの連携

arrayパースペクティブにおいて、other-windowするとヒント表示が開始される機能を追加しましたので、
最新に更新して下さい。
また、設定によって e2wm:dp-array した時に自動でヒント表示したりも可能です。
詳しくは、Wikiを参照して下さい。

その他

arrayパースペクティブではバッファの文字が縮小表示されますが、 e2wm:c-array-font-decrease で
縮小具合が設定できます。
pophint.elと連携する場合は、ヒントも小さくなってしまうので、デフォルトより小さめな値に
設定しないと見づらいと思います。

また、行列の最大数に関する設定項目も用意してくれていますので、これらも活用すると良いのではと思います。