XKB可以容纳多少层?

XKB可以容纳多少层?

我打算在非常规的 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 */

相关内容