运行Emacs shell时可见的ANSI转义序列(这些不是ANSI颜色)

时间:2014-08-02 12:06:46

标签: shell emacs ansi-escape

当我在Emacs中运行shell命令时,我经常会看到ANSI代码。它们似乎发生在shell进程产生新进程时。

以下是在Emacs shell中运行Stata的示例。在底部可以看到ANSI代码(如果它们是这样的话):

. ls *.tex
ls *.tex

-rw-r--r--  1 pnj  staff  78006 Jun 23 17:21 un_paper.tex
-rw-r--r--  1 pnj  staff   1821 Dec 22  2013 un_results.tex

. shell ls *.tex
shell ls *.tex

^[[?1l^[>un_paper.tex                    un_results.tex
^[[?1h^[=
.

注意:关于ANSI颜色转义序列有许多类似的SO问题。这不是我的问题!我已经需要ansi-coloransi-color-for-comint-mode-on,并且ANSI颜色正常工作。另外,使用ansi-term解决了这个问题,但我更喜欢标准shell的缓冲区特性。 eshell稍微好一点,但仍显示一些转义码。

我的猜测是这些是屏幕模式/光标移动代码,但我无法弄清楚如何让emacs忽略或处理它们。 TERM设置为xterm-256color。

更新:我了解到h和l代码用于设置终端/显示模式,我认为Emacs无法处理。有没有办法可以抑制它们的显示?

2 个答案:

答案 0 :(得分:2)

正如你所说,Emacs的eshell无法处理转义码 - 它是一个“愚蠢”的终端。但是,您的TERM变量设置告诉您的shell它能够处理这些转义码。

当你进入eshell时,将TERM设置为“哑”应该会使那些丑陋的转义代码消失。

答案 1 :(得分:0)

实际上,emacs支持shell中的颜色,但只支持部分颜色。在ncurses(dumb-emacs-ansi)中有一个终端描述,附有你不想使用它的原因(条目前面的注释)。