Files
dotemacs/lisp/utilities/compile.el
2022-01-09 21:19:46 +01:00

75 lines
2.3 KiB
EmacsLisp

;;; compile.el --- sets up Emacs compile support -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(defun user--compilation-mode-hook ()
"Compilation mode hook.")
(defun user--compilation-filter-hook ()
"Hook for filtering compilation output."
;; Temporarily make buffer writable.
(let ((inhibit-read-only t))
;; Colorize compilation output.
(ansi-color-apply-on-region (point-min) (point-max))))
(defun user/compile ()
"Compile current context."
(interactive)
(let ((ede-proj (user/proj-from-path user/ede-proj (path-abs-buffer))))
(cond
(ede-proj (user/proj-build ede-proj))
((feature-p 'flex-compile) (call-interactively 'flex-compile-compile))
((fboundp 'mode-compile) (call-interactively 'mode-compile))
(t (call-interactively 'compile)))))
;; https://www.emacswiki.org/emacs/CompileCommand
(use-package compile
:defer
:init
(user/bind-key-global :code :compile 'user/compile)
:hook ((compilation-mode-hook . user--compilation-mode-hook)
(compilation-filter-hook . user--compilation-filter-hook))
:config
(validate-setq
;; Prevent input in compilation buffer.
compilation-disable-input nil
;; Automatically scroll output.
compilation-scroll-output t)
(with-eval-after-load 'popwin
(add-to-list
'popwin:special-display-config
;; Don't select compilation window when shown
'(compilation-mode :height 20 :dedicated t)))
;; https://github.com/plandes/flex-compile
(use-package flex-compile
:disabled
:pin "MELPA")
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html
(use-package mode-compile
:defer
:config
;; Ensure byte-run has been loaded or mode-compile will override
;; `define-obsolete-variable-alias'.
(when (load "byte-run.el" nil :noerror)
(validate-setq
;; Set a sane compilation frame name.
mode-compile-other-frame-name "*compilation*"
;; Run make with low priority and use multiple processes.
mode-compile-make-program "nice make"
mode-compile-default-make-options "-k -j"
;; Save the current buffer on compilation.
mode-compile-always-save-buffer-p t)
(with-executable 'clang
(add-to-list 'cc-compilers-list "clang")
(add-to-list 'c++-compilers-list "clang++")))))
(provide 'utilities/compile)
;;; compile.el ends here