屏幕上击键的文本表示方案是什么?

屏幕上击键的文本表示方案是什么?

如何导出代表屏幕中某个击键的字符序列?我的意思是,bind 将什么作为输入。例如,“s”代表“s”键上的明显击键。 “S”代表“shift+s”。但其他更复杂组合的表示对我来说并不清楚,并且遵循的方案似乎相当模糊。

我四处寻找之前询问过特定情况“tab”和“shift+tab”的表示是什么,但我找不到答案。所以我想最好的办法就是尝试理解总体方案。我也见过,但它现在对我有用。

有人可以解释一下为此遵循什么方案/规则屏幕吗?导出任意组合键的表示形式的规则是什么?它们是特定于屏幕的还是与其他软件共享?也许还有其他 GNU 软件?这是在哪里记录的?

答案1

没有任何方案screen像任何终端应用程序一样不处理击键,而是处理从终端设备读取的字符或字符序列。

终端(或类似终端仿真器xterm)将击键转换为字符或字符序列,并通过线路(在终端仿真器的情况下,该线路是虚拟的)发送到系统。终端设备的线路规则可能会对此进行一些修改(例如将CR变成LF)。

要知道screen当您在终端上键入内容时接收到什么字符或字符序列,您可以使用例如来od为您显示它们。

例如,如果我输入od -tc终端,od -tc将从终端设备读取字符,并将它们显示在标准输出上(如果您没有重定向输出,则也显示在终端设备上)可打印方式。

例如,这是我输入时的输出:(Up Enter Ctrl+D后者表示od输入结束):

0000000 033   [   A  \n
0000004

Up已发送 3 个字符 ESC[A,并且\r已更改为\n

screen实际上将其主机终端设置为生的模式,这样行规则就不会进行任何转换,并且不会对任何字符进行特殊处理(例如上面004发送的字符Ctrl+D)。

要查看终端在该模式下发送的内容,您可以执行以下操作:

$ stty raw; stty min 1 time 10; dd count=1 2> /dev/null | od -tc; stty sane
0000000 033   [   A
                   0000003

请注意,\n输出 byod尚未转换为\r\nfor 输出(\n是换行,当输出到终端时,它仅将光标向下移动,而不是移动到需要回车符 ( \r) 的行的开头)。

上面,我们将终端设置为生的模式,但也要设置它,以便read一旦接收到字符,终端设备上的 a 在百分之十秒后超时(因为否则,我们必须在完成返回1之前输入很多字符)。readod

按所有终端都会发送 TAB ASCII 字符,Tab也称为\t^I或。对于,并非所有终端都发送相同的内容(例如,有些终端发送,有些也发送,有些不发送)。C-I\011Shift+TabESC [ Z\t

terminfo 数据库可以$TERM通过kcbt功能 (后标签,但不一定发送Shift-Tab)。

对于当前终端:

$ tput kcbt | od -tc
0000000 033   [   Z
0000003

相关内容