画面を3等分する。

1920x1200の26インチのディスプレイに、emacsを全画面表示して使っていると、各ウィンドウの大きさは3等分くらいでちょうど良い。
Emacsテクニックバイブル*1Emacs辞典*2、それからMeadow/Emacs memoを参考にして、

  • ウィンドウをn等分する関数
  • フレームが複数のウィンドウを持ってる時にはカーソルを隣のウィンドウに移し、そうでなければウィンドウを3等分する関数

を書いて、.emacs.d/init.el に追加した。

;;; 画面分割
(defun split-n (n)
  "現在のウィンドウをn等分する関数"
  (interactive "p") ; コマンドとして呼ぶときは前置引数を取る
  (if (= n 2)
      (progn
	(split-window-horizontally)
	(other-window 2))
    (progn
      (split-window-horizontally (/ (window-width) n))
      (other-window 1)
      (split-n (- n 1)))))
(defun other-window-or-split ()
  "windowがひとつのときは画面を3分割し、そうでなければとなりのwindowにカーソルを移す"
  (interactive)
  (if (one-window-p)
      (split-n 3))
  (other-window 1))
(global-set-key (kbd "C-t") 'other-window-or-split) ;; C-t に割り当て
;;; 分割した画面間をShift+矢印で移動
(setq windmove-wrap-around t)
(windmove-default-keybindings)

今回覚えたこと

  • いくつかの関数をまとめて実行したいときは、prognでつなぐ
  • 関数をコマンドとしても使いたい場合はinteractiveに変数の型を指定するコード文字を付けて呼ぶ

*1:

*2: