使用 Emacs Cx Cs 时 GNU Screen 的问题(保存缓冲区)

sim*_*mao 33 linux emacs gnu-screen

当我在 GNU Screen 下使用 emacs 时,如果我调用 Cx Cs 屏幕挂起并且不响应任何键盘输入。

我无法重现这一点,但每天至少有一次我必须终止屏幕会话并重新启动它。

我该如何解决这个问题?

谢谢

use*_*686 54

CtrlS是“暂停传输”(XOFF)流控制字符。通常它由 tty 驱动程序处理,或者在这种情况下是 Screen。它的对立面是 XON,或CtrlQ

当您启动 Emacs 时,它通常会接管大部分特殊字符(例如,不仅仅是流控制,还有通常的CtrlC“中断”)。

  • 使用C-a :flow off以禁用流量控制此屏幕的窗口。

    确认C-a :info-flow在弹出窗口中查找)。

  • 如果它没有帮助,请尝试stty -ixonstty stop undef

    (您可以使用stty -f /dev/tty1或在单独的窗口中执行此操作stty </dev/tty1。)

在我的系统 (Linux) 上,Screen注意到何时禁用了 tty 的流量控制。不过,您的操作系统可能有一些限制。

  • 详细说明@simao 和@grawity 的评论 - 要永久禁用流量控制(我认为这是大多数人想要的结果),请将“defflow off”行添加到您的“~/.screenrc”文件中,或在您的文件中创建一个如果主目录不存在。这足以让我的 emacs 在“屏幕”窗口内正常运行。在重新绑定任何键之前应该考虑这种方法。 (3认同)
  • 这为我解决了问题,但我还没有了解为什么“突然”屏幕被置于这种模式......也许有一些屏幕按键可以控制我无意中输入的流量......? ? (2认同)

小智 5

在屏幕下使用 emacs 时,我遇到了与锁定屏幕相同的问题以及更多问题。例如,emacs 中的 Ca 会将您带到行的开头,但会被屏幕截获并且不起作用。

解决方案:

使用以下内容在主目录中创建文件 .screenrc:

#Change escape character to C-u 
escape "^uu"                                                                    
#unbind ctrl+s from xoff in order to be able to search in emacs                 
bind s                                                                          
bind ^S                                                                         
#unbind ctrl+x from lockscreen in order to be able to save in emacs             
bind x                                                                          
bind ^X                                                                         
Run Code Online (Sandbox Code Playgroud)

然后,每次打开新屏幕时,您需要使用 Cu 来输入新屏幕命令,而不是使用 Ca。另外两个更改解决了我需要更改的一些事情,以便能够在屏幕下使用 emacs 而不会出现问题。