;;; oni-compilation.el --- Compilation configuration -*- lexical-binding: t; -*- ;; Copyright (C) 2019 Tom Willemse ;; Author: Tom Willemse ;; Keywords: local ;; Version: 2021.0919.230646 ;; Package-Requires: (oni-alert xterm-color) ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Configuration for the compilation mode. ;;; Code: (require 'compile) (require 'subr-x) (require 'xterm-color) (setq compilation-scroll-output t) (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= (buffer-name buffer) "*compilation*") (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-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) (provide 'oni-compilation) ;;; oni-compilation.el ends here