2010-06-18 51 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