GNU Screen在Emacs shell模式下:如何修复颜色转义代码

10
我想在Emacs的shell模式中附加screen或tmux。我经常使用带有inferior processes的screen在远程服务器上运行emacs;如果我能将工作流转移到本地的emacs+TRAMP,那就好了;但是必须具备重新附加持久会话的功能。(这种工作流对于在R中进行分析特别有用[1])
Shell模式非常理想,因为当我使用M-x term或M-x ansi-term + screen + R组合时,会遇到各种故障甚至崩溃。然而,在M-x shell下运行时,我似乎无法摆脱ansi颜色渲染为转义代码的情况。当我使用ansi-color-for-comint-mode-on时,它们很好-但是一旦出现screen,它就变成了一团糟。
有人找到了正确解释shell + screen或tmux的ansi颜色的条件集吗?完全消除颜色怎么样?其他替代方案在运行持久远程进程并将其附加到本地emacs方面是否有更好的选择?
[1] http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

1
@Seppo是正确的:shell-mode无法做到你想要的。描述一下你在使用M-x term或者M-x ansi-term时遇到的问题可能会有所帮助,也许我们可以提供帮助。 - Dale Hagglund
2个回答

5
就我所知,Screen需要终端的一些特性,Emacs的shell模式显然缺乏并且无法提供这些特性,因为它不像VT100一样是传统字符终端。因此,问题不在于如何摆脱或尝试解释颜色代码 - Screen需要更多终端功能才能正常运行。
就我所知,默认情况下,Screen甚至不会在Emacs的shell模式下启动(它会出错并显示需要清除屏幕的能力)。网络上的一些帖子似乎暗示要设置TERM=xterm来解决���个问题,但这只是愚弄Screen,让它认为终端具有XTerm的能力,而实际上它并没有这种能力。
Emacs的term和ansi-term模式将提供Screen所需的终端功能,但遗憾的是您似乎遇到了这些模式的麻烦。
相比之下,我建议看看“emacsclient -t”命令(Emacs的一部分),它允许您打开连接到现有Emacs实例的本地框架,类似于Screen允许您重新连接到先前创建的Screen实例的方式。这样您可以配置一个emacsclient在您的本地计算机上,以便重新连接到持久的远程Emacs实例。

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接