;; Start of oni-stillness (use-package compile :config (require 'subr-x) (require 'xterm-color) (defun oni-compilation--maybe-dont-show-window (buffer-or-name alist plist) "Don't show BUFFER-OR-NAME unless it absolutely must. ALIST and PLIST contain extra information about the buffer." (if (alist-get 'allow-no-window alist) buffer-or-name (funcall (plist-get plist :fallback) buffer-or-name alist (plist-put (copy-sequence plist) :custom nil)))) (defun oni-compilation--maybe-display-compilation-window (buffer status) "Display BUFFER if STATUS is not finished." (unless (string= (string-trim status) "finished") (display-buffer buffer))) (defun oni-compilation--compilation-finish-notify-function (buffer status) "Show an alert of the status of the compliation. BUFFER is the `compilation-mode' buffer and STATUS is the exit status of the process." (when (string-match-p (rx "*compilation*" "*Chanced Tests*") (buffer-name buffer)) (if (string= (string-trim status) "finished") (alert "Compilation finished succesfully") (alert "Compilation finished with an error")))) (defun oni-compilation--filter-xterm-colors (func proc string) "Call FUNC with PROC and STRING filtered through ‘xterm-color-filter’." (funcall func proc (xterm-color-filter string))) (setq compilation-scroll-output t) (setq compilation-environment '("TERM=xterm-256color")) (add-to-list 'display-buffer-alist '("\\`\\*compilation\\*\\'" display-buffer-in-side-window (side . bottom) (slot . 0) (window-height . 0.33))) (add-hook 'compilation-finish-functions #'oni-compilation--maybe-display-compilation-window) (add-hook 'compilation-finish-functions #'oni-compilation--compilation-finish-notify-function) (advice-add 'compilation-filter :around #'oni-compilation--filter-xterm-colors)) ;; End of oni-stillness