From d5a65ee24f2ea631670d061eba03ab39f0c15685 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Mon, 9 Jul 2018 18:40:44 -0700 Subject: [PATCH] Move compilation configuration to separate file Also add functions from my Windows configuration. --- emacs/.emacs.d/init/oni-compilation-init.el | 72 ++++++++++++++++++++ emacs/.emacs.d/init/oni-compilation-init.org | 41 ----------- 2 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 emacs/.emacs.d/init/oni-compilation-init.el delete mode 100644 emacs/.emacs.d/init/oni-compilation-init.org 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 diff --git a/emacs/.emacs.d/init/oni-compilation-init.org b/emacs/.emacs.d/init/oni-compilation-init.org deleted file mode 100644 index 162f7d2..0000000 --- a/emacs/.emacs.d/init/oni-compilation-init.org +++ /dev/null @@ -1,41 +0,0 @@ -#+TITLE: Compilation mode configuration - -#+BEGIN_SRC emacs-lisp - (require 'compile) - (require 'shackle) - (require 'subr-x) -#+END_SRC - -Scroll output in compilation mode. - -#+BEGIN_SRC emacs-lisp - (setq compilation-scroll-output t) -#+END_SRC - -Don't show the compilation window when compilation starts. - -#+BEGIN_SRC emacs-lisp - (defun oni:maybe-dont-show-window (buffer-or-name alist plist) - "Don't show BUFFER-OR-NAME unless it absolutely must." - (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)))) - - (add-to-list 'shackle-rules - '(compilation-mode :custom oni:maybe-dont-show-window - :fallback shackle-display-buffer - :other t :select t)) -#+END_SRC - -Show the compilation window when compilation has finished with a -non-zero exit status. - -#+BEGIN_SRC emacs-lisp - (defun oni:maybe-display-compilation-window (buffer status) - "Display BUFFER if STATUS is not finished." - (unless (string= (string-trim status) "finished") - (display-buffer buffer))) - - (add-hook 'compilation-finish-functions #'oni:maybe-display-compilation-window) -#+END_SRC