From d5a65ee24f2ea631670d061eba03ab39f0c15685 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Mon, 9 Jul 2018 18:40:44 -0700 Subject: Move compilation configuration to separate file Also add functions from my Windows configuration. --- emacs/.emacs.d/init/oni-compilation-init.el | 72 +++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 emacs/.emacs.d/init/oni-compilation-init.el (limited to 'emacs/.emacs.d/init/oni-compilation-init.el') diff --git a/emacs/.emacs.d/init/oni-compilation-init.el b/emacs/.emacs.d/init/oni-compilation-init.el new file mode 100644 index 0000000..44b45e7 --- /dev/null +++ b/emacs/.emacs.d/init/oni-compilation-init.el @@ -0,0 +1,72 @@ +;;; oni-compilation-init.el --- Compilation mode configuration -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Tom Willemse + +;; Author: Tom Willemse +;; Keywords: local + +;; 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: + +;; My configuration for compilation mode. + +;;; Code: + +(require 'compile) +(require 'shackle) +(require 'subr-x) + +(setq compilation-scroll-output t) + +(defun oni-compilation-init--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-init--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-init--ansi-color-for-compilation-filter () + "Apply ANSI terminal escape codes to compilation output." + (ansi-color-apply-on-region compilation-filter-start (point))) + +(defun oni-compilation-init--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")))) + +(add-to-list 'shackle-rules + '(compilation-mode :custom oni-compilation-init--maybe-dont-show-window + :fallback shackle-display-buffer + :other t :select t)) + +(add-hook 'compilation-filter-hook #'oni-compilation-init--ansi-color-for-compilation-filter) +(add-hook 'compilation-finish-functions #'oni-compilation-init--maybe-display-compilation-window) +(add-hook 'compilation-finish-functions #'oni-compilation-init--compilation-finish-notify-function) + + +(provide 'oni-compilation-init) +;;; oni-compilation-init.el ends here -- cgit v1.2.3-54-g00ecf