split-root.elでEmacsで横長のウィンドウを作成する
split-root.elは図(本家より転載)のように確実に画面下部に横長のウィンドウを作成します。
普段は通常のEmacsのウィンドウ分割に満足していても、特定のケースでは画面下部に出したいこともあります。 この場合は、 split-root.el を使った display-buffer-function を作成します。 display-buffer関数は、 display-buffer-function に指定してある関数を呼びます。
split-root.elは split-root にありますが、auto-install.elで直接インストールできます。
M-x install-elisp http://nschum.de/src/emacs/split-root/split-root.el
(require 'split-root) (defvar split-root-window-height nil) (defun display-buffer-function--split-root (buf &optional ignore) (let ((window (split-root-window split-root-window-height))) (set-window-buffer window buf) window))
有効にするためには display-buffer-function--split-root を display-buffer-function に一時的に設定しておきます。 split-root-window-heightも指定しておくと、ウィンドウの高さを指定できます。
例:twittering-modeで投稿する
twittering-modeでtwitterに投稿するには、 twittering-update-status-interactive を使います。 内部で twittering-update-status-from-pop-up-buffer → pop-to-buffer が呼ばれ、その関数は display-buffer を呼びます。 この関数は複数箇所で呼ばれているので、アドバイスを定義します。
(defadvice twittering-update-status-from-pop-up-buffer (around split-root activate) "" (let ((display-buffer-function 'display-buffer-function--split-root) (split-root-window-height 26)) ad-do-it))
例:org-capture
org-mode で素早くメモを取る org-capture でもこの設定を使っています。 内部で switch-to-buffer-other-window → pop-to-buffer と呼んでいるので、やはり display-buffer-function を設定することでウィンドウ分割をコントロールできます。
(defun org-capture--split-root () (interactive) (let ((display-buffer-function 'display-buffer-function--split-root) (org-capture)))
そして、新しく定義した org-capture--split-root を org-captureの代わりにキーに割り当てます。
例:anything.el
もちろん、anything.elでも使えます。 anything-display-function に設定します。
[emacs][anything] anything-display-function でストレスフリー - プログラム番長のヲボエガキ 参照。
常にsplit-rootを使う場合
(setq anything-display-function 'display-buffer-function--split-root)
anything呼び出し時に指定する場合
キーワード引数は、任意の変数名(anything-を取り除いた名前)を使うことができます。
(anything :source 'anything-c-source-buffers :display-function 'display-buffer-function--split-root)
anythingを呼び出す関数に指定する場合
anything-project-grepがanythingを呼んでいるので、letで囲みます。
(defun anything-project-grep--split-root () (interactive) (let ((anything-display-function 'display-buffer-function--split-root)) (anything-project-grep)))