compilation buffer を最初から表示させないのを作ってみた。エラーの時だけ表示される。

font-lock のとこもうちょっとなんとかならんのかしら。
エラーが起きたかどうかをテキストプロパティから判別してるんだけど、
font-lock が遅延評価かなんかしてるせいか display-buffer しないとプロパティが設定されない。
fontify-buffer は font-lock-mode だと機能してくれなくて 一旦 font-lock-mode 解除とか間抜けなことするはめに。

(defadvice compilation-start (around compile-silently activate)
"コンパイル時にバッファを表示しない."
(cl-letf (((symbol-function 'display-buffer) 'ignore))
ad-do-it))

;; コンパイルエラー時のみ *compilation* バッファ表示
(add-hook 'compilation-finish-functions
(lambda (buffer msg)
(with-current-buffer buffer
(font-lock-mode -1)
(font-lock-fontify-buffer)
(font-lock-mode 1)
(when
(text-property-not-all (point-min) (point-max)
'compilation-message nil)
(display-buffer buffer))))
)