Кто-нибудь добавил поддержку ansi-color в Emacs в режиме компиляции? Если да, то какое свойство/атрибут выполняет программа цветной записи, чтобы убедиться, что ее активный терминал поддерживает раскраску ANSI-escape.
Раскраска ANSI в режиме компиляции
Ответ 1
Там уже есть функция для применения цвета к буферам comint. Вам просто нужно включить его в буферах компиляции:
(require 'ansi-color)
(defun colorize-compilation-buffer ()
(toggle-read-only)
(ansi-color-apply-on-region compilation-filter-start (point))
(toggle-read-only))
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
Программы цветной записи должны проверять переменную среды TERM
и базу данных terminfo, чтобы проверить, поддерживает ли терминал цвет. На практике многие программы игнорируют это и полагаются на пользовательскую настройку. Emacs по умолчанию установит тип терминала компиляции dumb
, но это можно переопределить, установив переменную compilation-environment
.
Ответ 2
Мое оптимизированное решение, которое не загрязняет M-x grep
(только для M-x compile
):
(ignore-errors
(require 'ansi-color)
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
(add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer))