aboutsummaryrefslogtreecommitdiff
path: root/bard-elisp
diff options
context:
space:
mode:
Diffstat (limited to 'bard-elisp')
-rw-r--r--bard-elisp/bard-compile.el53
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)