雑文発散

«前の日記(2014-08-05) 最新 次の日記(2014-08-07)» 編集
過去の日記

2014-08-06 [長年日記]

[Emacs] Emacs で分割表示中のウインドウのバッファを入れ替える swap-buffers を作ってみた

以前も書いたけど、最近は Emacs をフルスクリーンにして左右に分割し、左側に実行用のコード、右側にユニットテストのコードを並べて TDD を行ったりしている。

ただ、いったん分割を解除して、再分割をしたときに、左側にユニットテスト、右側に実行コードが表示されちゃう場合がある。意識して分割・バッファ読み込みをすれば、そんなことはないんだろうけど、手が覚えている手順で再分割・再読み込みをすると、逆になっちゃうときがあるんだよね、これが。

そういうときは、両方のウインドウでバッファ切り替えをするんだけど、これがちょっと面倒くさく感じてきた。ということで、分割したウインドウのバッファを入れ替えるコマンド swap-buffers を作ってみた。

いろいろ怪しげな部分はあるんだけど、左右分割のバッファを入れ替えることはできている。

まず、左のウインドウに a.txt 、右のウインドウに b.txt を表示している状態のフレームがあるとする。

実行前

この時、M-x swap-buffers を実行する。オレは M-xhelm-M-x に入れ替えてるので、そういう表示になっているけど、そこら辺は気にしないで良いよ。

実行

そして、実行すると、次のように左に b.txt 右に a.txt となり、期待通りに入れ替わっている。

実行後

キーバインドを C-x \ に定義しているので、もちろんそのキー入力でも実行できる。

さっき「怪しげ」と書いたのは、いくつかの理由がある。

  • ネームスペースを考えてないコマンド名
  • 3分割の時は期待通りに動かない
  • 「あっちのウインドウ」を取得するのって (get-lru-window) でいいの?という不安

ネームスペースと言っても prefix を付けるだけなので、 my- とか付けちゃえば良いわけだけど、my- はイマイチだなぁと思いつつ、他に良いものが思いつかずにいまのところナシにしちゃっている。

3分割以上の場合、どことどこを入れ替えるべき?という定義の問題もあって、どうしようかなぁというところ。まぁ、左右入れ替えがオレのニーズなので、それが実現できれば OK なので、しばらくはこのままなのかも。。。

(get-lru-window) が正しいのかどうかは、、、もうちょっと Emacs Lisp のリファレンスをしっかり読まないと良く分からない。

あと、なんか、こういったニーズは、割とみんな持ってるんじゃない?と思っていて、既にこれを解決するソリューションがありそうな気がしている。更には Emacs のデフォルトで存在していてもおかしくないと思っている。

しかし、もうちょっとスマートに Emacs Lisp を書けるようになりたいなぁ。まだまだマニュアルとにらめっこしないと分からない部分が多い。