有没有人在编译模式Emacs中添加对ansi-color的支持?如果是这样,颜色编写程序必须检查什么属性/属性,以确保其活动终端支持ANSI-escape着色。
答案 0 :(得分:53)
已经有一个将颜色应用于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)
两次。
答案 1 :(得分:28)
我的优化解决方案不会污染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))
答案 2 :(得分:3)
在@stribb的solution上乱跳,然后在@gavenkoa的solution上乱跳,这就是如何通过出色的use-package来设置它:
(use-package ansi-color
:config
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
:hook (compilation-filter . my-colorize-compilation-buffer))
答案 3 :(得分:3)
截至2020年,最现代的方式似乎是xterm-color
Emacs软件包。
有关详细信息,请参见my answer on the duplicate question。
答案 4 :(得分:0)
@gavenkoa的solution横行:
(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-color不可用,也不会引发错误。就个人而言,我发现ignore-error
的通配符捕获语义令人反感。