75 lines
2.3 KiB
EmacsLisp
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
|