diff options
Diffstat (limited to 'bard-elisp')
| -rw-r--r-- | bard-elisp/bard-compile.el | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/bard-elisp/bard-compile.el b/bard-elisp/bard-compile.el new file mode 100644 index 0000000..5c4d20f --- /dev/null +++ b/bard-elisp/bard-compile.el @@ -0,0 +1,53 @@ +;; 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) |
