Я бы предложил простое решение - создать функцию, которая устанавливает предпочтительный макет. Например, мне нравится иметь несколько каналов IRC во второй половине моего экрана в отдельных окнах, чтобы я мог время от времени просматривать их во время кодирования, например, в другом окне. Итак, я написал простой код, который позаботится о разбиении окна и расположит мои буферы так, как я хочу:
;; show some buffers
(defun show-some-buffers (buffer-list)
(split-window-horizontally)
(other-window 1)
(dolist (buffer buffer-list)
(split-window-vertically)
(switch-to-buffer (get-buffer buffer))
(other-window 1))
;; at the end we have one extra window we need to delete
(delete-window)
(balance-windows))
;; show some erc buffers
(defun show-erc-buffers ()
(interactive)
(show-some-buffers '("#emacs" "#clojure")))
Код довольно прост и не содержит проверки ошибок, но он даст вам подсказку о том, что я имею в виду.
Возможно, вы захотите использовать также регистры для хранения некоторых конфигураций окна.