相对Emacs新手在这里,只是尝试调整我的编程工作流程以适应emacs。到目前为止,我已经发现了shell-pop,我非常喜欢按需点播终端,这些终端在需要时可以弹出奇怪的命令。
到目前为止我对Emacs的理解是shell
是一个“哑”终端,不支持任何ansi控制代码,这使得它与ncurses之类的东西不兼容,这些ncurses试图在a上绘制复杂的UI。终端模拟器。这就是为什么你不能在shell模式下使用less
或top
或类似的原因。
然而,我似乎遇到了ansi-term
的问题,这不是最终的结果,而是它已被破解。当然,运行less
或git log
甚至是nano
都没有问题,但有些事情在{{{}}运行时似乎无法正常显示1}},例如ansi-term
和apt-get
。我不确定它的名称是什么,但nosetests
的输出的特点是实时更新最后一行显示的内容,然后在该行上方滚动出不变的文本行。似乎是apt-get
之类的东西和像less
之类的东西。不知何故,cat
完全不喜欢这个,我得到非常混乱的输出,它似乎只输出一行上的所有东西,或者只是丢失它的位置并随机输出所有东西。在ansi-term
的情况下,它开始正常,但如果任何库喷出任何STDERR,输出都会以类似的方式进入地狱。
通过混搭nosetests
和C-l
,可以解决这个问题,但这并不总是可靠的。
有人知道这里发生了什么吗?有没有办法解决RET
以便它可以正确显示所有内容?或者是否有一些我不知道的其他模式更好?理想情况下,我喜欢像“Gnome Terminal”那样毫不费力地“正常工作”的东西,它可以在没有单一打嗝的情况下运行上述所有程序。
谢谢!
答案 0 :(得分:3)
我通过注释掉我的整个.emacs.el解决了这个问题,然后取消注释并重新启动文件中每一行的emacs。我发现只有以下几行才能解决这个问题:
'(fringe-mode 0 nil (fringe))
(此行禁用自定义变量内部的条纹)。
我想这是Emacs中的一个错误,当任何输出行超过$ COLUMN列时,禁用边缘会导致term-mode导致输出非常糟糕。
无论如何,我根本不喜欢这些边缘,似乎我能够至少禁用左边缘而不会引发这个问题:
(set-fringe-mode (cons 0 8))
答案 1 :(得分:1)
也许apt-get基于$TERM
环境变量做了不同的事情。如果设置TERM=dumb
会怎样?如果这可以使事情有效,那么您可以尝试使用不同的值,直到找到支持足够功能但仍然有效的值。
答案 2 :(得分:0)
请注意,git 2.0.1(2014年6月25日)现在可以在显示详细消息时更好地检测哑终端。
可能帮助Emacs更好地显示从git收到的一些消息,但上面报告的fringe-mode
错误肯定是主要原因。
mnaoumov
)
sideband.c
:不要在非终端从服务器端在#2边带上收到的诊断消息通过ANSI终端控制序列"
\033[K
"发送到标准错误。擦除到每行末尾附加的行尾。但是,某些程序(例如GitExtensions for Windows)在不了解终端控制序列的情况下读取和解释和/或显示消息,从而将其显示给最终用户。
为了帮助这些程序,在没有将标准错误流发送到tty时,压制控制序列。