Emacs的Shell命令输出未显示ANSI颜色,但代码却显示了。

7

当我在我的Emacs 21.4中执行M-!时,ANSI代码会变成文字。例如:ls --color

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

有没有办法让它带有颜色和UTF8编码?

同样的问题之前在SO上已经回答过了,但结果并不完全令人满意(给出的解决方案是打开shell模式)。我知道如何在shell中使用颜色。我只想知道如何在M!(shell-command)中使用颜色,或者根本不可能。

当您只想快速显示某些内容而不想移动到此缓冲区时,shell模式太过于侵入性,并且您希望它自动消失而无需C-x-k。显然,在某些情况下,shell缓冲区更方便,但由于其他问题,我发现如何将颜色放入shell模式。

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

2个回答

21

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
关于UTF-8:
要指定一个编码系统来转换shell命令输出中的非ASCII字符,请在执行此命令之前使用C-x RET c。
非交互式调用者可以通过绑定coding-system-for-read和coding-system-for-write来指定编码系统。
这是来自shell-command文档的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接