2011-04-28 144 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的文档。