;; Stolen from (http://endlessparentheses.com/ansi-colors-in-the-compilation-buffer-output.html) (require 'ansi-color) (defun endless/colorize-compilation () "Colorize from `compilation-filter-start' to `point'." (let ((inhibit-read-only t)) (ansi-color-apply-on-region compilation-filter-start (point)))) (add-hook 'compilation-filter-hook #'endless/colorize-compilation) ;; Stolen from (https://oleksandrmanzyuk.wordpress.com/2011/11/05/better-emacs-shell-part-i/) (defun regexp-alternatives (regexps) "Return the alternation of a list of regexps." (mapconcat (lambda (regexp) (concat "\\(?:" regexp "\\)")) regexps "\\|")) (defvar non-sgr-control-sequence-regexp nil "Regexp that matches non-SGR control sequences.") (setq non-sgr-control-sequence-regexp (regexp-alternatives '(;; icon name escape sequences "\033\\][0-2];.*?\007" ;; non-SGR CSI escape sequences "\033\\[\\??[0-9;]*[^0-9;m]" ;; noop "\012\033\\[2K\033\\[1F" ))) (defun filter-non-sgr-control-sequences-in-region (begin end) (save-excursion (goto-char begin) (while (re-search-forward non-sgr-control-sequence-regexp end t) (replace-match "")))) (defun filter-non-sgr-control-sequences-in-output (ignored) (let ((start-marker (or comint-last-output-start (point-min-marker))) (end-marker (process-mark (get-buffer-process (current-buffer))))) (filter-non-sgr-control-sequences-in-region start-marker end-marker))) (add-hook 'comint-output-filter-functions 'filter-non-sgr-control-sequences-in-output) (provide 'bard-compile)