How to make the compilation window in Emacs to always be a certain size


I want to make the compilation window in Emacs to always appear at the bottom of a window, and always be a certain height. So far I put the following lines in my .emacs file:

(setq split-height-threshold 0)
(setq compilation-window-height 10)

…and it does work for when I have only one window open, but as soon as I split the screen into two windows horizontally (that is, the dividing line in the middle goes from the top to the bottom), the compilation window stops respecting the height variable, and splits the window right in the middle.

How do I fix this?

Best Solution

I would use something like this, freely adapted from the EmacsWiki:

(defun my-compilation-hook ()
  (when (not (get-buffer-window "*compilation*"))
        (let* ((w (split-window-vertically))
               (h (window-height w)))
          (select-window w)
          (switch-to-buffer "*compilation*")
          (shrink-window (- h compilation-window-height)))))))
(add-hook 'compilation-mode-hook 'my-compilation-hook)

If the *compilation* buffer is not visible, this will split the window vertically, resize the newly opened window to 10 lines height, and open the *compilation* buffer in it.