emacs shell命令输出不显示ANSI颜色而是代码

时间:2011-04-28 13:51:47

标签: emacs ansi

当我做M-!在我的emacs 21.4中,ANSI代码是文字的。例如:ls --color

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

有没有办法让它有颜色和UTF8?

同样的问题是answered in SO before,但结果并不完全令人满意(给出的解决方案是打开shell模式)。我知道如何在shell中使用颜色。我只想知道我怎么能用M做颜色! (shell-command)或者根本不可能。

当你只想快速显示某些东西并且不想移动到这个缓冲区并且你想让它在没有C-x-k的情况下自动消失时,shell模式就太过于干扰。显然有些情况下shell缓冲区更方便但是由于另一个问题,我发现了如何将颜色添加到shell模式。

[注意] emacs正在使用中 GNU Emacs 21.4.1(x86_64-redhat-linux-gnu,X工具包,Xaw3d滚动条)2008-06-15 on builder6.centos.org

2 个答案:

答案 0 :(得分:20)

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))))))

答案 1 :(得分:1)

关于UTF-8:

  

指定编码系统   转换中的非ASCII字符   shell命令输出,使用C-x RET c   在此命令之前。

     

非交互式呼叫者可以指定   编码系统通过绑定   coding-system-for-read' and 编码系统换写”。

这来自shell-command

的文档