有没有人在编译模式 Emacs 中添加了对 ansi-color 的支持?如果是这样,颜色编写程序必须检查什么属性/属性以确保其活动终端支持 ANSI 转义着色。
问问题
6622 次
5 回答
71
已经有一个将颜色应用于 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)
中,不需要上述代码中的两个调用。
于 2012-11-15T23:23:58.430 回答
34
我优化的不污染解决方案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))
于 2013-12-26T17:19:31.893 回答
7
对@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-color 不可用,仍然不会引发错误。就个人而言,我发现通配符捕获语义ignore-error
令人反感。
于 2019-03-07T13:06:48.290 回答
4
重复@stribb 的解决方案,即重复@gavenkoa 的解决方案,这是使用令人敬畏的使用包进行设置的方法:
(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))
于 2020-06-09T12:05:18.467 回答
3
截至 2020 年,最现代的方式似乎是xterm-color
Emacs 包。
有关详细信息,请参阅我对重复问题的回答。
于 2020-09-02T18:23:06.553 回答