如何在 GNU 屏幕中绑定“tab”和“shift+tab”?

如何在 GNU 屏幕中绑定“tab”和“shift+tab”?

如何绑定按键TabShiftTab屏幕?我的问题是我不知道将什么传递给屏幕bind命令来指定这些击键。

顺便说一句,我知道GNU 屏幕:在区域之间移动但答案并不存在。

以下所有操作均失败并出现错误-X: bind: character, ^x, or (octal) \032 expected

screen -X bind "\033[Z" focus up
screen -X bind "^[[Z" focus up
screen -X bind "\t" focus up
screen -X bind \033[Z focus up
screen -X bind ^[[Z focus up
screen -X bind \t focus up

如果我点击CtrlA:输入命令,也会发生同样的情况。

答案1

bindkey与使用 指定字符序列相反,bind唯一的方法是使用bind -k CAPCAP 是termcap关键功能的地方。

例如,

bind -k ku focus up

Up用于绑定发送到的字符序列focus up。对于后台选项卡,应该是:

bind -k kB focus up

不幸的是,由于某种原因,它看起来不起作用。不知道为什么。我的第一个解释是错误的。听起来这与ncurses未正确处理 termcap 等价物有关kcbt

$ infocmp -1 | grep Z
    cbt=\E[Z,
    kcbt=\E[Z,
$ infocmp -1C | grep Z
    :bt=\E[Z:\

(kcbt 未翻译为 kB)。

如果我添加到我的~/.screenrc

 termcapinfo * kr=\E[Z
 bind -k kr focus up

也就是说,如果我告诉screen你,无论主持人终端 ( *)、F63( kr) 发送\E[Z,并绑定F63focus up,然后就可以了。但请注意,按Shift+Tabnow 会发送屏幕内 \EOC,这是终端仿真器显示的字符序列屏幕实现(与主机终端相对)发送F63

答案2

bindkey -k kB stuff ^[OZ
bind -k kB focus up

Ctrl就我而言,问题是当我按+ A- Shift+时插入的字符串Tab位于+^[[Z之后,翻译为CtrlA

  • ^[进入复制/回滚模式
  • [中止
  • 然后显示Z

即标准 VT100 样式转义字符序列与复制/回滚模式字符序列发生冲突。因此,我为 backtab termcap 名称添加了一个键绑定,以更改按+kB时插入输入缓冲区中的字符串。ShiftTab^[OB

请参阅屏幕手册页中的“输入翻译”部分。

相关内容