我打算在非常规的 8 级德国 Neo2 布局中添加一个额外的级别,以便在按下控制修饰符时将按键重定向到 QWERTY。
虽然我不认为 9 个级别不起作用,但知道最大级别数会让人放心。
我在某处读到,状态/级别/类型信息被位掩码为 32 位数据(这确实是 的十六进制输出xev
)。
所有这些 32 位都用于传达电平信息吗?
编辑:我将这个 2 位十六进制数(应该是修饰键的最大数量)与最大级别数(修饰键组合)混为一谈。此信息不应与我的问题相关。
即类似以下内容。因为我昨天开始学习XKB,还没有遇到过超过8级的类型。
type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
// [...]
// + map[Control]= Level0;
level_name[Level0] = "QWERTY shortcuts"
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
答案1
所有引用均来自X 键盘扩展:库规范
给定密钥类型的总级别数XkbKeyTypeRec
以无符号字符形式保存在某种结构中:(num_levels
第 140 页)
typedef struct { /* Key Type */
…
unsigned char num_levels; /* total # shift levels, do not modify directly */
…
} XkbKeyTypeRec, *XkbKeyTypePtr;
num_levels 字段保存键类型的移位级别总数。 Xkb 使用 num_levels 来确保绑定到键的符号数组足够大。
理论上,最大级别数限制为 255(从 1 开始)
然而,由于每个设计中每个键的符号数量限制为 255 个,并且最多可以有四组……,因此实际限制除以四:63,正如我们在第 127 页上看到的
核心实现将每个键的符号数量限制为 255 个。通过四组,每组最多可以有 63 个符号(或移位级别)。
顺便说一句,如果您想更改给定按键类型的级别数,请使用XkbResizeKeyType
(第 145 页):
XkbResizeKeyType ( xkb , type_ndx , map_count , want_preserve ,
new_num_lvls )
XkbDescPtr xkb ; /* keyboard description containing client map to update */
int type_ndx ; /* index in xkb->map->types of type to change */
int map_count ; /* total # of map entries needed for the type */
Bool want_preserve ; /* True => list of preserved modifiers is necessary */
int new_num_lvls ; /* new max # of levels for type */