How*_*ard 6 terminal keyboard escape-characters
假设我们有一个带有一些未知键的通用键盘,这些键可能会向终端发送转义序列。
键盘连接到在通用 BSD/Linux 上运行的 xterm 终端仿真器。
要为未知键创建正确的映射,我们必须首先知道它们发送给 xterm 的转义序列。
但是如何知道密钥发送的转义序列呢?
Sté*_*las 13
您的键盘未连接到xterm
。它已连接到您的 PC。内核驱动程序知道如何解码键盘发送的按键按下和释放,并通过特殊设备文件上的通用 API 将其提供给应用程序。
X 服务器就是这样一个使用该 API 的应用程序。
它将这些按键按下和释放转换为 X“KeyPress”和“KeyRelease”事件,这些事件携带作为键码和键符的按键信息。那是另一个API。
xterm
是一个 X 应用程序。它连接到 X 服务器并告诉它:我对所有 KeyPress 和 KeyRelease 事件感兴趣。当它具有焦点并且 KeyPress 和 KeyRelease 事件没有被您的窗口管理器或其他全局注册某些 KeyPress 事件的应用程序劫持时,xterm
将接收KeyPress
和KeyRelease
事件。
xterm
将keysym
KeyPress 事件中的 a 转换为它发送到伪终端驱动程序的主端的字符序列。在您中运行的应用程序xterm
最终将从该伪终端驱动程序的从属端读取由 发送的字符xterm
,但可能被伪终端驱动程序更改(例如,在某些情况下,0xd 字符被转换为 0xa 字符,0x3 会导致要发送的 SIGINT...)。
有了这些澄清。要了解 X 服务器在给定按键按下时发送的键码或键符,您可以使用xev
.
要知道 发送的是哪个字符序列(如果有)xterm
,您需要先告诉伪终端驱动程序不要与它们混合 ( stty raw
) 然后您可以使用cat -vt
或sed -n l
或od
查看它们:
{
stty raw min 1 time 20 -echo
dd count=1 2> /dev/null | od -vAn -tx1
stty sane
}
Run Code Online (Sandbox Code Playgroud)
(上面添加 amin 1 time 20
和 usingdd
所以它在一次按键后退出,Ctrl-C否则你将无法退出)。
归档时间: |
|
查看次数: |
2345 次 |
最近记录: |