Emacsのレイアウトをtmux風に変更するrotate.el

Emacsの画面分割に関して、これまではid:shiba_yu36さんのemacsのwindow幅に合わせて、分割数を変えるを便利に使わせてもらっていました。ですが、コードを書いている時には等分以外にも結構頻繁にレイアウトを変更することが多いと思います。

画面のレイアウト管理系ではid:kiwanamiさんのe2wmが高機能で良さそうな感じでしたが、こまめにwindowを1つにしたり分割したりしているのでもう少し軽い感じのものを探していました。

理想はtmuxのペインのプリセットのレイアウトがぐるぐるまわるような奴が欲しかったのですが見当たらなかったため簡単な物を作成しました。

rotate.el

daic-h/emacs-rotate

機能はプリセットで用意されているレイアウトを現在分割しているwindowの数に合わせて切替えるrotate-layoutと、レイアウトはそのまま中のbufferだけをグルグル回すrotate-windowです。プリセットの種類はtmuxと同じ、

  • even-horizontal
  • even-vertical
  • main-horizontal
  • main-vertical
  • tiled

の5種類で、rotate-layoutという関数を実行するたびに上から順番にlayoutが切り替わります。自分は下記の様に設定してます。

  (require 'rotate)
  (global-set-key (kbd "C-t") 'rotate-layout)
  (global-set-key (kbd "M-t") 'rotate-window)

これで、C-tを押すと順番にレイアウトが切り替わっていき、M-tでレイアウトの中のバッファーが順番にまわります。単体ではしっくり来なかった、分割したwindowを黄金比で拡大してくれるroman/golden-ratio.elと合わせて使うと意外と良い感じかもしれない。

動作の様子

rotate-window

rotate-layout、2 window

rotate-layout、4 window

rotate-layout、9 window