branch: elpa/magit
commit 3fe657dba34032de45d22bb18cff6c7bd1838440
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    magit-process-apply-ansi-colors: New option
    
    By popular demand, add this option, but warn against customizing it.
    
    Closes #5348.
---
 lisp/magit-process.el | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/lisp/magit-process.el b/lisp/magit-process.el
index bc4c0ce7c8..5bd5be112a 100644
--- a/lisp/magit-process.el
+++ b/lisp/magit-process.el
@@ -41,6 +41,9 @@
 (defvar messages-buffer-name)
 (defvar y-or-n-p-map)
 
+(define-obsolete-variable-alias 'magit-process-finish-apply-ansi-colors
+  'magit-process-apply-ansi-colors "Magit-Section 4.3.2")
+
 ;;; Options
 
 (defcustom magit-process-connection-type (not (eq system-type 'cygwin))
@@ -250,6 +253,24 @@ implement such functions."
   :group 'magit-process
   :type 'boolean)
 
+(defcustom magit-process-apply-ansi-colors nil
+  "Whether and when to apply color escapes in the process buffer.
+
+Magit instructs Git to not colorize its output, but third-party Git
+hooks may do so anyway.  We recommend you figure out how to prevent
+such hooks from colorizing their output instead of customizing this
+option.
+
+If `nil' (the default), do not apply color escape sequences.  If `t',
+apply them once the subprocess has finished.  If `filter', apply them
+as input arrives (which is more expensive and potentially fragile).
+This is a footgun; starter-kits should leave this option untouched."
+  :package-version '(magit . "4.3.2")
+  :group 'magit-process
+  :type '(choice (const :tag "Do not apply" nil)
+                 (const :tag "Apply when subprocess has finished" t)
+                 (const :tag "Apply using process filter" filter)))
+
 (defcustom magit-process-timestamp-format nil
   "Format of timestamp for each process in the process buffer.
 If non-nil, pass this to `format-time-string' when creating a
@@ -843,6 +864,8 @@ Magit status buffer."
         (setq string (substring string (1+ ret-pos)))
         (delete-region (line-beginning-position) (point)))
       (setq string (magit-process-remove-bogus-errors string))
+      (when (eq magit-process-apply-ansi-colors 'filter)
+        (setq string (ansi-color-apply string)))
       (insert (propertize string 'magit-section
                           (process-get proc 'section)))
       (set-marker (process-mark proc) (point))
@@ -1195,8 +1218,6 @@ Limited by `magit-process-error-tooltip-max-lines'."
 
 (defvar-local magit-this-error nil)
 
-(defvar magit-process-finish-apply-ansi-colors nil)
-
 (defun magit-process-finish (arg &optional process-buf command-buf
                                  default-dir section)
   (unless (integerp arg)
@@ -1256,7 +1277,7 @@ Limited by `magit-process-error-tooltip-max-lines'."
                                               'magit-process-ok
                                             'magit-process-ng)))
       (set-marker-insertion-type marker t))
-    (when magit-process-finish-apply-ansi-colors
+    (when (eq magit-process-apply-ansi-colors t)
       (ansi-color-apply-on-region (oref section content)
                                   (oref section end)))
     (if (= (oref section end)

Reply via email to