键盘¶
KEYCODE表示物理(或逻辑)键。关键字码在包含范围$[8, 255]$内。
keycode值不携带内在信息
不能使用协议更改key和keycode之间的映射
KEYSYM是键帽上的符号编码。定义的KEYSYMs集包括字符集Latin-1、Latin-2、Latin-3、Latin-4、Kana、Arabic、Cyrillic、Greek、Tech、Special、Publish、APL、Hebrew、Thai和Korean,以及键盘上常用的一组符号(Return、Help、Tab等)。
最高有效位(29位中)的KEYSYMs保留为特定于供应商的。
与每个KEYCODE相关联的KEYSYMs列表。该列表旨在表示对应键上的一组符号。如果列表(忽略末尾的NoSymbol项)是单个KEYSYM “K”,则该列表被视为列表”K NoSymbol K NoSymbol”。如果列表(忽略后面的NoSymbol项)是一对KEYSYMs “K1 K2”,则该列表被视为列表”K1 K2 K1 K2”。如果列表(忽略后面的NoSymbol项)是KEYSYMs “K1 K2 K3”的三元组,则该列表被视为列表”K1 K2 K3 NoSymbol”。当列表中需要显式的“void”元素时,可以使用值VoidSymbol。
列表的前四个元素被分成两组keysym。组1包含第一个和第二个keysym,组2包含第三个和第四个keysym。在每个组中,如果该组的第二个元素是NoSymbol,则该组应被视为第二个元素与第一个元素相同,除非第一个元素是字母KEYSYM“K”,并且为其定义了小写和大写形式。在这种情况下,该组应该被视为第一个元素是“K”的小写形式,第二个元素是“K”的大写形式。
从KeyPress事件获取KEYSYM的标准规则只使用组1和组2 KEYSYM;没有定义列表中其他KEYSYMs的解释。修饰符状态决定使用哪个组。组之间的切换由名为MODE SWITCH的KEYSYM控制,通过将KEYSYM附加到一些KEYCODE,并将KEYCODE附加到Mod1到Mod5的任何一个修饰符。这个修饰语叫做“组修饰语”。对于任何KEYCODE,当组修饰符关闭时使用组1,当组修饰符打开时使用组2。
当名为CAPS Lock的KEYSYM附加到某些KEYCODE并且该KEYCODE附加到Lock修饰符时,Lock修饰符被解释为CapsLock。当名为SHIFT Lock的KEYSYM附加到某些KEYCODE并且该KEYCODE附加到Lock修饰符时,Lock修饰符被解释为ShiftLock。如果Lock修饰符可以同时解释为CapsLock和ShiftLock,则使用CapsLock解释。
“键盘”键的操作由名为NUM LOCK的KEYSYM控制,通过将该KEYSYM附加到一些KEYCODE并将该KEYCODE附加到Mod1到Mod5的任何一个修饰符。这个修饰符被称为“numlock修饰符”。在名称中带有KEYPAD前缀的标准KEYSYMs被称为“小键盘”KEYSYMs;这些KEYSYMS具有十六进制范围#xFF80到#xFFBD(包括#xFFBD)的数值。此外,十六进制范围#x11000000到#x1100FFFF的特定于供应商的KEYSYMS也是键盘KEYSYMS。
在一个组中,KEYSYM的选择是通过应用下面列表中满足的第一条规则来确定的:
numlock修饰符开启,第二个KEYSYM为键盘KEYSYM。在这种情况下,如果Shift修饰符处于开启状态,或者Lock修饰符处于开启状态并被解释为ShiftLock,则使用第一个KEYSYM;否则,使用第二个KEYSYM。
Shift和Lock修饰符都关闭了。在本例中,使用第一个KEYSYM。
Shift修饰符是关闭的,Lock修饰符是打开的,并且被解释为CapsLock。在本例中,使用第一个KEYSYM,但如果该KEYSYM是小写字母,则使用对应的大写KEYSYM。
Shift修饰符处于开启状态,Lock修饰符处于开启状态,并被解释为CapsLock。在本例中,使用第二个KEYSYM,但如果该KEYSYM是小写字母,则使用对应的大写KEYSYM。
Shift修饰符处于开启状态,或者Lock修饰符处于开启状态,并且被解释为ShiftLock,或者两者都是。在本例中,使用第二个KEYSYM。
KEYCODEs和KEYSYMs之间的映射不被服务器直接使用;它仅仅是为客户端读写而存储的。