From: Ivan Sokolov Date: Mon, 19 Jul 2021 16:54:18 +0000 (+0200) Subject: Add function for filtering ANSI sequences when compiling X-Git-Tag: emacs-28.0.90~1798 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f7f2024b86bdcf028ce942e59d1cfdba89747d0b;p=emacs.git Add function for filtering ANSI sequences when compiling * lisp/ansi-color.el (ansi-color-for-compilation-mode): New user option (bug#49609). (ansi-color-compilation-filter): New function. --- diff --git a/etc/NEWS b/etc/NEWS index 0c90683c767..7bf42330b9d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1601,6 +1601,14 @@ Defaults to 'libravatar', with 'unicornify' and 'gravatar' as options. ** Compilation mode +--- +*** New function 'ansi-color-compilation-filter'. +This function is meant to be used in 'compilation-filter-hook'. + +--- +*** New user option 'ansi-color-for-compilation-mode'. +This controls what 'ansi-color-compilation-filter' does. + *** Regexp matching of messages is now case-sensitive by default. The variable 'compilation-error-case-fold-search' can be set for case-insensitive matching of messages when the old behavior is diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el index 44dc0351d45..79dc821ea19 100644 --- a/lisp/ansi-color.el +++ b/lisp/ansi-color.el @@ -75,6 +75,7 @@ ;;; Code: (defvar comint-last-output-start) +(defvar compilation-filter-start) ;; Customization @@ -181,6 +182,24 @@ in shell buffers. You set this variable by calling one of: :group 'ansi-colors :version "23.2") +(defcustom ansi-color-for-compilation-mode t + "Determines what to do with compilation output. +If nil, do nothing. + +If the symbol `filter', then filter all ANSI graphical control +sequences. + +If anything else (such as t), then translate ANSI graphical +control sequences into text properties. + +In order for this to have any effect, `ansi-color-compilation-filter' +must be in `compilation-filter-hook'." + :type '(choice (const :tag "Do nothing" nil) + (const :tag "Filter" filter) + (other :tag "Translate" t)) + :group 'ansi-colors + :version "28.1") + (defvar ansi-color-apply-face-function #'ansi-color-apply-overlay-face "Function for applying an Ansi Color face to text in a buffer. This function should accept three arguments: BEG, END, and FACE, @@ -228,6 +247,19 @@ This is a good function to put in `comint-output-filter-functions'." (t (ansi-color-apply-on-region start-marker end-marker))))) +;;;###autoload +(defun ansi-color-compilation-filter () + "Maybe translate SGR control sequences into text properties. +This function depends on the `ansi-color-for-compilation-mode' +variable, and is meant to be used in `compilation-filter-hook'." + (let ((inhibit-read-only t)) + (pcase ansi-color-for-compilation-mode + ('nil nil) + ('filter + (ansi-color-filter-region compilation-filter-start (point))) + (_ + (ansi-color-apply-on-region compilation-filter-start (point)))))) + (define-obsolete-function-alias 'ansi-color-unfontify-region 'font-lock-default-unfontify-region "24.1")