2010-06-18 126 views
35

在Emacs中工作时,我使用编译命令(默认为F12)来运行程序。当我在Emacs中运行Cucumber时,Cucumber吐出Emacs编译模式不能解释的ANSI颜色。结果是丑陋而难以阅读。这里的*汇编*缓冲区的展示丑的一个片段:黄瓜的ANSI颜色弄乱了emacs编译缓冲区

^[[31m(::) failed steps (::)^[[0m 

命令我使用的是:

(cd ~/lab/rails/todolist && rake cucumber:all) 

版本:

  • Emacs的23.1
  • 黄瓜0.8。 3
  • 黄瓜栏0.3.2

的世界将是阳光和鸟儿的歌唱,如果我能:

  • 获取的Emacs来解释它的编译缓冲区ANSI颜色代码,或
  • 获取黄瓜停止随地吐痰ANSI颜色码

有没有想法?

回答

62

我用这个在我的编辑缓冲区打开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) 
+4

这就是为什么我喜欢这个地方。好的解决方案奇迹般有效。谢谢! – 2010-06-18 23:40:42

+0

正是我在找什么!不幸的是,在我的环境(cygwin-xemacs)中,它使用“进程过滤器中的错误”(缓冲区只读#<缓冲区“*编译*”>),这看起来很奇怪。有任何想法吗? – thoni56 2010-07-25 12:01:31

+0

这对我来说也很好。我还添加了'(linum-mode 0)'(并且,在第一次尝试'(line-number-mode 0)'时,它没有工作,但我无论如何都离开了,可能会为别人工作) (toggle-read-only)',这让我更加快乐(现在几乎没有包装的线条不会)。 – lindes 2011-03-05 10:04:03

19

我改进代码,以便它不污染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)) 
+0

** Note **我只用Emacs 24.x测试这段代码,它可能在版本23.x或更低版本中不起作用... – gavenkoa 2014-01-09 10:16:03

+0

这工作正常,为什么'(add-hook'compilation-filter-hook'ansi -color-for-comint-mode-on)'不? – 2016-12-22 18:05:17