当我在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-color
和ansi-color-for-comint-mode-on
,并且ANSI颜色正常工作。另外,使用ansi-term解决了这个问题,但我更喜欢标准shell的缓冲区特性。 eshell稍微好一点,但仍显示一些转义码。
我的猜测是这些是屏幕模式/光标移动代码,但我无法弄清楚如何让emacs忽略或处理它们。 TERM设置为xterm-256color。
更新:我了解到h和l代码用于设置终端/显示模式,我认为Emacs无法处理。有没有办法可以抑制它们的显示?
答案 0 :(得分:2)
正如你所说,Emacs的eshell无法处理转义码 - 它是一个“愚蠢”的终端。但是,您的TERM变量设置告诉您的shell它能够处理这些转义码。
当你进入eshell时,将TERM设置为“哑”应该会使那些丑陋的转义代码消失。
答案 1 :(得分:0)
实际上,emacs支持shell
中的颜色,但只支持部分颜色。在ncurses(dumb-emacs-ansi
)中有一个终端描述,附有你不想使用它的原因(条目前面的注释)。