当我在 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 color escape sequences类似的SO问题有很多。这不是我的问题!我已经需要 ansi-color
和 ansi-color-for-comint-mode-on
,并且 ANSI 颜色正在工作。此外,使用 ansi-term 解决了这个问题,但我更喜欢标准 shell 的类似缓冲区的特性。 eshell 稍微好一点,但仍会显示一些转义码。
我的猜测是这些是屏幕模式/光标移动代码,但我不知道如何让 emacs 忽略或处理它们。 TERM 设置为 xterm-256color。
更新:我了解到 h 和 l 代码用于设置终端/显示模式,我认为 Emacs 无法处理。有什么方法可以阻止它们显示吗?
最佳答案
如您所说,Emacs 的 eshell 无法处理转义码——它是一个“哑巴”终端。但是,您的 TERM 变量设置告诉您的 shell 它能够处理这些转义码。
当您在 eshell 中时,将 TERM 设置为“dumb”应该可以让那些难看的转义码消失。
关于shell - 运行 Emacs shell 时可见的 ANSI 转义序列(这些不是 ANSI 颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094855/