2

相对的 Emacs 新手,只是想调整我的编程工作流程以适应 emacs。到目前为止,我已经发现了 shell-pop,并且我非常喜欢在需要敲击奇怪命令时弹出的按需终端。

到目前为止,我对 Emacs 的理解是,它shell是一个不支持任何 ansi 控制代码的“愚蠢”终端,这使得它与试图在终端仿真器上绘制复杂 UI 的 ncurses 之类的东西不兼容。这就是为什么您不能在 shell 模式下使用lessortop或类似的原因。

但是,我似乎遇到了麻烦ansi-term,这并不是它被破解的全部,最终。less当然,它运行或git log什至都没有问题nano,但是当它们在 中运行时,有些东西似乎无法正确显示ansi-term,例如apt-getnosetests。我不太确定它的名称是什么,但apt-get的输出的特点是实时更新最后一行显示的内容,然后在该行上方滚动出不变的文本行。它似乎介于类似less和更愚蠢的东西之间,例如cat. 不知何故ansi-term根本不喜欢这样,而且我得到非常乱码的输出,它似乎只在一行上输出所有内容,或者只是通常丢失它的位置并随机输出所有内容。在 的情况下nosetests,它开始正常,但如果任何库吐出任何 STDERR,输出都会以类似的方式进入地狱。

通过一些摆弄似乎可以通过捣碎C-l和来解决这个问题RET,但它并不总是可靠的。

有人知道这里发生了什么吗?有什么方法可以修复ansi-term,以便它可以正确显示所有内容吗?或者是否有其他一些我不知道的更好的模式?理想情况下,我想要像 Gnome 终端一样轻松“正常工作”的东西,它可以运行上述所有程序而不会出现任何问题。

谢谢!

4

3 回答 3

3

我通过注释掉我的整个 .emacs.el 解决了这个问题,然后为文件中的每一行取消注释并重新启动 emacs。我发现仅以下一行是导致该问题的原因:

   '(fringe-mode 0 nil (fringe))

(此行禁用自定义设置变量内部的边缘)。

我猜这是 Emacs 中的一个错误,当任何输出行超过 $COLUMN 列时,禁用边缘会导致 term-mode 严重混淆它的输出。

无论如何,我真的不太喜欢边缘,而且似乎我至少能够禁用左边缘而不会触发这个问题:

(set-fringe-mode (cons 0 8))
于 2012-09-09T15:55:40.733 回答
1

也许 apt-get 会根据$TERM环境变量做不同的事情。如果你设置会发生什么TERM=dumb?如果这能让事情奏效,那么您可以尝试不同的值,直到找到一个支持足够功能但仍然有效的值。

于 2012-09-08T04:32:48.877 回答
0

请注意,git 2.0.1(2014 年 6 月 25 日)现在在显示详细消息时可以更好地检测哑终端。
可能有助于 Emacs 更好地显示从 git 收到的一些消息,但fringe-mode上面报告的错误肯定是主要原因。

请参阅Michael Naumov的提交 38de156 ( )mnaoumov

sideband.c: 不要在非终端上使用 ANSI 控制序列

在边带#2 上从服务器端接收到的诊断消息被发送到带有 ANSI 终端控制序列“ \033[K”的标准错误,该序列会擦除到附加在每行末尾的行尾。

然而,一些程序(例如 Windows 的 GitExtensions)在不理解终端控制序列的情况下读取和解释和/或显示消息,导致它们显示给最终用户。
为了帮助这些程序,当标准错误流没有被发送到 tty 时,静噪控制序列。

于 2014-07-27T16:56:13.457 回答