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

emacs外壳模式下的Gnu屏幕:如何修复颜色转义码,emacs,gnu-screen,tmux,Emacs,Gnu Screen,Tmux,我想在emacs中以shell模式附加screen或tmux。我经常发现自己在远程服务器的屏幕上运行的emacs进程较差;如果我能将工作流转移到本地emacs+TRAMP,那就太好了;但是,必须能够重新连接持久会话。(这种工作流对于R[1]中的分析特别有用) Shell模式非常理想,因为在使用M-x term或M-x ansi term+screen+R的组合时,我不断遇到各种各样的小故障,甚至崩溃。然而,当在M-x Shell下运行时,我似乎无法摆脱屏幕中呈现为转义码的ansi彩色。当我在上为

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

Shell模式非常理想,因为在使用M-x term或M-x ansi term+screen+R的组合时,我不断遇到各种各样的小故障,甚至崩溃。然而,当在M-x Shell下运行时,我似乎无法摆脱屏幕中呈现为转义码的ansi彩色。当我在上为comint模式使用
ansi颜色时,它们很好——但一旦屏幕打开,它就变成了一团可怕的混乱

有没有人想出了一套条件,用shell+screen或tmux正确解释ansi颜色?把颜色全部去掉怎么样?。。在运行持久远程进程并将其连接到本地emacs方面,还有其他选择吗


[1]

我不使用screen,但也许您可以从.bashrc中修复此问题。我有一堆条件代码,为xterm窗口打开颜色,但为其他不支持它的终端关闭颜色。M-xshell将TERM变量设置为dumb,因此您可以对此进行测试并相应地设置颜色

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

据我所知,Screen需要您的终端的功能,而Emacs的shell模式根本无法提供这些功能,因为它不是VT100这样的传统字符终端。所以问题不在于消除或试图解释色码——屏幕需要更多的终端功能才能正常工作

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

Emacs的term和ansi term模式将提供Screen所需的终端功能,但不幸的是,您似乎在使用这些模式时遇到了问题


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

@Seppo是正确的:shell模式无法实现您想要的功能。描述您在
M-x术语
M-x ansi术语
方面遇到的问题可能会很有用,也许我们可以帮助您解决这些问题。