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

Mik*_*key 14 ssh cygwin gnu-screen

我正在通过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
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试了$ 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
Run Code Online (Sandbox Code Playgroud)

如果事情正常,我不认为bash应该接收转义序列,因为屏幕应该抓住它并将其转换为命令.

如何使功能键工作?

Mr *_*ooz 19

如果你有一个更奇怪的设置(例如Windows - > PuTTY - > Linux)标准bindkey -k解决方案不能正常工作,你可以使用showkey命令:

showkey -a
Run Code Online (Sandbox Code Playgroud)

找到从击键到键码的映射.在我的特殊情况下,将这些放入其中~/.screenrc就可以了:

bindkey "^[[11~" select 1
bindkey "^[[12~" select 2
bindkey "^[[13~" select 3
bindkey "^[[14~" select 4
bindkey "^[[15~" select 5
bindkey "^[[17~" select 6
bindkey "^[[18~" select 7
bindkey "^[[19~" select 8
bindkey "^[[20~" select 9
bindkey "^[[21~" select 10
bindkey "^[[23~" select 11
bindkey "^[[24~" select 12
Run Code Online (Sandbox Code Playgroud)


Mik*_*key 4

经过大量的实验,我能够通过将以下行添加到我的 .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~
Run Code Online (Sandbox Code Playgroud)

  • 在 bash 中,如果您按 Ctrl-V,然后按感兴趣的功能键,那么您将直观地看到上面的代码打印在命令行上。这就是找到代码的方法。也许这是一个“readline”功能? (2认同)