emacs shell模式下的Gnu屏幕:如何修复颜色转义码

时间:2011-01-14 09:55:24

标签: emacs gnu-screen tmux

我想在shell模式下在emacs中附加screen或tmux。我经常发现自己在远程服务器的屏幕内运行带有劣质进程的emacs;如果我可以将工作流程转移到本地emacs + TRAMP,那就太好了;但是,必须具备重新连接持久会话的能力。 (这种工作流程对R [1]中的分析特别有用)

Shell模式是相当可取的,因为我在使用Mx术语或Mx ansi-term + screen + R的组合时遇到了各种故障甚至崩溃。但是,我似乎无法摆脱ansi彩色渲染为在Mx shell下运行时屏幕中的转义码。当我使用ansi-color-for-comint-mode-on时,它们很好 - 但是一旦屏幕出现,就会变得非常混乱。

有没有人想出用shell + screen或tmux正确解释ansi颜色的条件?如何完全消除颜色?在运行持久性远程进程并将它们附加到本地emacs方面还有其他选择吗?...

[1] http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

2 个答案:

答案 0 :(得分:5)

据我所知,Screen需要终端的功能,Emacs的shell模式根本不能提供,也不能提供,因为它不是像VT100这样的传统字符终端。所以问题不在于摆脱或试图解释颜色代码 - 屏幕需要更多的终端功能才能正常运行。

默认情况下,屏幕甚至没有以Emacs的shell模式启动,据我所知(它错误地说它需要清晰的屏幕功能)。网络上的一些帖子似乎建议设置TERM = xterm来解决这个问题,但它只是在愚弄Screen认为终端具有XTerm的功能,而它没有。

Emacs的术语和术语模式将提供Screen所需的终端功能,但不幸的是,您似乎遇到了这些模式的麻烦。

我建议改为查看“emacsclient -t”命令(Emacs的一部分),它允许您以与Screen允许的方式类似的方式打开连接到现有Emacs实例的本地帧。重新连接到以前创建的Screen实例。这样您就可以在本地计算机上配置emacsclient,以通过TCP重新连接到持久远程Emacs实例。

答案 1 :(得分:1)

我不使用屏幕,但也许您可以从.bashrc中修复此问题。我在那里有一堆条件代码,为xterm窗口打开颜色,但是对于不支持它的其他终端则将其关闭。 M-x shell将TERM变量设置为哑,因此您可以测试它并相应地设置颜色。

case "$TERM" in
dumb)
## non-color settings here
;;
xterm)
## color settings here
;;
*)
## default (maybe you want non-color here?)
;;
esac