通过 SSH 连接时,如何使用 F1-F12 键在 cygwin 中的 gnu 屏幕中切换屏幕?

通过 SSH 连接时,如何使用 F1-F12 键在 cygwin 中的 gnu 屏幕中切换屏幕?

我正在通过 SSH 从 Mac OS X 中的终端应用程序连接到运行 cygwin 的桌面。我已经在 cygwin 端启动了屏幕,并且可以通过 SSH 会话连接到它。此外,我在 .screenrc 文件中有以下内容:

bindkey -k k1 select 1  #  F1 = screen 1
bindkey -k k2 select 2  #  F2 = screen 2
bindkey -k k3 select 3  #  F3 = screen 3
bindkey -k k4 select 4  #  F4 = screen 4
bindkey -k k5 select 5  #  F5 = screen 5
bindkey -k k6 select 6  #  F6 = screen 6
bindkey -k k7 select 7  #  F7 = screen 7
bindkey -k k8 select 8  #  F8 = screen 8
bindkey -k k9 select 9  #  F9 = screen 9
bindkey -k F1 prev      # F11 = prev
bindkey -k F2 next      # F12 = next

但是,当我在屏幕上启动多个窗口并尝试通过功能键在它们之间切换时,我听到的只是一声哔哔声。

我已经尝试了 $TERM 的各种设置(例如 ansi、cygwin、xterm-color、vt100),但它们似乎并没有真正影响任何东西。

我已经验证终端应用程序确实发送了我期望的功能键的转义序列,并且我的 bash shell(在屏幕内运行)正在接收它。例如,对于 F1,它发送以下内容(hexdump 是我编写的 perl 脚本,它以 binmode 的形式获取 STDIN 并将其输出为十六进制/ascii 转储):

% hexdump
[press F1 and then hit ^D to terminate input]
00000000:  1b4f50                               .OP

如果一切正常,我认为 bash 不应该接收转义序列,因为 screen 应该捕获它并将其转换成命令。

如何让功能键发挥作用?

答案1

经过大量的实验,我能够通过在 .screenrc 中添加以下几行来使其正常工作:

terminfo * k1=\EOP
terminfo * k2=\EOQ
terminfo * k3=\EOR
terminfo * k4=\EOS
terminfo * k5=\E[15~
terminfo * k6=\E[17~
terminfo * k7=\E[18~
terminfo * k8=\E[19~
terminfo * k9=\E[20~
terminfo * F1=\E[23~
terminfo * F2=\E[24~

答案2

可能我的回答会补充上一个。您可以找到修改后的 terminfo 数据库,该数据库允许您使用 Fx 键以及 Alt+Fx、Ctrl+Fx、Shift+Fx、Alt+Shift+Fx 组合这里. 使用说明如下这里。当然,终端应用程序应该支持它们。这些键码来自控制台的 XFree 4 变体(在 konsole 中支持)。

相关内容