3

当我在 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 无法处理。有没有办法阻止它们被显示?

4

2 回答 2

3

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

当您在 eshell 中时,将 TERM 设置为“哑”应该会使那些丑陋的转义码消失。

于 2014-11-01T22:03:57.813 回答
0

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

于 2017-02-26T11:28:23.493 回答