2011-04-28 84 views
4

當我做M-!在我的emacs 21.4中,ANSI代碼得到了文字。例如:ls --coloremacs shell命令輸出不顯示ANSI顏色,但代碼

^[[0m^[[0m05420273.pdf^[[0m 
^[[0m100829_Baño1.pdf^[[0m 

有沒有一種使用顏色和UTF8的方法?

同樣的問題已answered in SO before但不完全令人滿意的結果(解決方案是打開殼模式)。我知道如何在一個殼中有顏色。我只想知道我如何能與M顏色! (shell命令),或者根本不可能。

當你只想要展示一些東西快,不想搬到這個緩衝區和你想擁有它沒有C-X-K自動消失殼模式是太冒昧。顯然有些情況下shell緩衝區更方便,但是由於另一個問題,我發現如何將顏色添加到shell模式。

[注]在使用 GNU Emacs的21.4.1的2008-06-15上builder6.centos.org下(x86_64-紅帽-Linux的GNU,X工具包,Xaw3d滾動條)的emacs

回答

18

ansi-color.el包含處理ANSI顏色代碼的功能。不幸的是,並沒有真正的方法將它與shell-command掛鉤。這是一個黑客的東西,但它的工作原理:

(require 'ansi-color) 

(defadvice display-message-or-buffer (before ansi-color activate) 
    "Process ANSI color codes in shell output." 
    (let ((buf (ad-get-arg 0))) 
    (and (bufferp buf) 
     (string= (buffer-name buf) "*Shell Command Output*") 
     (with-current-buffer buf 
      (ansi-color-apply-on-region (point-min) (point-max)))))) 
+0

這是一個很好的解決方案! – Thomas 2011-04-28 20:11:29

+2

@Thomas,如何在給予好評,然後呢? – cjm 2011-04-28 20:50:56

+0

我想,但我沒有真正的賬戶上SO,等我可以提出問題,回答問題,寫評論 - 但我不能給予好評。抱歉:-( – Thomas 2011-04-28 21:02:31

1

關於UTF-8:

要指定編碼系統 在 shell命令輸出轉換非ASCII字符,請使用CX此命令前的RET c 。

非交互呼叫者可通過綁定指定 編碼系統 coding-system-for-read' and coding-system-for-write'。

這是從shell-command的文檔。