【问题标题】:Gnu screen in emacs shell mode: how to fix color escape codesemacs shell 模式下的 Gnu 屏幕:如何修复颜色转义码
【发布时间】:2011-06-09 01:21:40
【问题描述】:

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

Shell 模式是相当可取的,因为我在使用 Mx term 或 Mx ansi-term + screen + R 的组合时不断遇到杂项故障甚至崩溃。但是,我似乎无法摆脱呈现为在 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/

【问题讨论】:

  • @Seppo 是正确的:shell 模式不能做你想做的事。描述您在使用 M-x termM-x ansi-term 时遇到的问题可能会很有用,也许我们可以帮助您解决这些问题。

标签: emacs gnu-screen tmux


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我不使用屏幕,但也许你可以从你的 .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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-02
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多