在Emacs中工作时,我使用编译命令(默认为F12)来运行程序。当我在Emacs中运行Cucumber时,Cucumber会吐出Emacs编译模式无法解释的ANSI颜色。结果很丑陋,难以阅读。这是* compilation *缓冲区的片段,显示丑陋:
^[[31m(::) failed steps (::)^[[0m
我正在使用的命令:
( cd ~/lab/rails/todolist && rake cucumber:all )
版本:
如果可以的话,世界将是阳光和鸟儿歌唱:
有什么想法吗?
答案 0 :(得分:69)
我用它在我的编译缓冲区中打开ansi颜色解释:
(require 'ansi-color)
(defun colorize-compilation-buffer ()
(let ((inhibit-read-only t))
(ansi-color-apply-on-region (point-min) (point-max))))
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
答案 1 :(得分:21)
我改进了代码,因此它不会像命令那样污染M-x grep
并且效率更高:
(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)
截至2020年,最现代的方式似乎是xterm-color
Emacs软件包。
使用M-x package-install
执行xterm-color
。
将以下几行添加到您的~/.emacs
或~/.emacs.d/init.el
中:
(require 'xterm-color)
(setq compilation-environment '("TERM=xterm-256color"))
(defun my/advice-compilation-filter (f proc string)
(funcall f proc (xterm-color-filter string)))
(advice-add 'compilation-filter :around #'my/advice-compilation-filter)
(请参见xterm-color documentation。)
请注意,如果未正确安装xterm-color
,这将提供一条错误消息。强烈建议这样做,因为在不完整的Emacs安装中,它将清楚地向您说明问题所在,而不是让您怀疑为什么颜色不起作用。
但是,如果您真的更想不被告知(如果缺少xterm-color
,请改用:
(when (require 'ansi-color nil t)
(setq compilation-environment '("TERM=xterm-256color"))
(defun my/advice-compilation-filter (f proc string)
(funcall f proc (xterm-color-filter string)))
(advice-add 'compilation-filter :around #'my/advice-compilation-filter))