设置 GNU Screen 以将转义代码发送到 TI 上的外部终端

设置 GNU Screen 以将转义代码发送到 TI 上的外部终端

我在 mintty 中使用 GNU Screen。为了让滚轮工作,我必须使用转义码 ( ^[[?7787h) 切换 mintty 滚轮模式。这会导致滚轮不再工作less。要解决这个问题,我需要less在启动和退出时将适当的转义码发送到外部终端。

我找到了^[P可用于将转义码发送到运行 Screen 的终端的转义码。所以我想将其添加^[P^[[?7787ltiscreen 中的 termcap 中。为了实现这一点,我将以下行添加到我的.screenrc

termcapinfo * "" "\EP\E[?7787l\E[?1049h"

less但那根本没有影响。我知道这^[P^[[?7787l有效——如果我只是回显它,一切都很好。我可以编写一个less包装器来处理这个问题,但我更希望能够通过 termcap 来做到这一点,因为它可以在所有应用程序中工作,而不仅仅是在 less 中。

所以我的问题是:当终端切换到备用屏幕时,如何更改less发送到终端的转义代码?

答案1

该命令应该可以工作:

termcapinfo * "" "ti=\EP\E[?7787l\E\\\E[?1049h:te=\EP\E[?7787h\E\\\E[?1049l"

*用更具体的终端类型名称替换会更好,但我不知道TERMmintty 设置了什么值。)

与您的版本的重要区别:

  1. 该命令的第二个和第三个参数termcapinfo必须包含以 分隔的 termcap 定义(name=value:,而不仅仅是一个简单的转义序列。

  2. 转义序列^[P必须以 终止^[\,否则过多的后续输出将直接进入终端,而不会经过 Screen 的适当处理(如果忘记了终止序列,则有一些保护措施可以避免 Screen 完全锁定,但显示仍然会混乱)。

  3. 您应该同时更改tite,以便退出less(或任何其他全屏程序)时能够正确恢复先前的状态。

当然,如果您less使用-X选项调用,鼠标滚轮将无法正常工作,因为使用此选项less不会将tite字符串发送到终端。请记住,此选项不仅可以在less命令行中直接指定,还可以通过LESS环境变量指定。


但是,如果less编译为使用terminfo而不是termcap,则命令的第三个参数termcapinfo将不会改变 的行为,因为它仅影响 导出到其子进程的环境变量less的内容,并且数据库内容无法动态更改。在这种情况下,您将需要使用和之类的实用程序来创建包含和值的 terminfo 源条目(并对其进行修改),然后将条目编译为二进制格式;然后使用来使用此条目。TERMCAPscreenterminfoinfocmpticsmcuprmcupterm <your-entry-name>.screenrc

相关内容