ANSI着色的编译模式(ANSI Coloring in Compilation Mode)

2019-07-03 20:24发布

有任何人添加为编辑模式的Emacs ANSI色支持? 如果是的话是什么属性/属性做颜色写程序有为了确保检查其活动的终端支持ANSI转义着色。

Answer 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变量。

更新 :请注意,在Emacs 24.5两次调用(toggle-read-only)在上面的代码是不需要的。



Answer 2:

我的优化的解决方案,其不污染Mx grep (仅适用于Mx 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))


Answer 3:

Riffing上@ gavenkoa的解决方案 :

(when (require 'ansi-color nil t)
  (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))

这不会阻止错误,但如果ANSI色不可用仍不会引发错误。 就个人而言,我发现的通配符捕捉语义ignore-error反感。



文章来源: ANSI Coloring in Compilation Mode