我想知道preserve关键字在自定义xkb键盘映射的xkb_types部分中的作用。
以下是现有配置文件的示例:
type "FOUR_LEVEL_SEMIALPHABETIC" {
modifiers= Shift+Lock+LevelThree;
map[Shift]= Level2;
map[Lock]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Lock+LevelThree]= Level3;
preserve[Lock+LevelThree]= Lock;
map[Shift+Lock+LevelThree]= Level4;
preserve[Shift+Lock+LevelThree]= Lock;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
我对这两行感兴趣:
preserve[Lock+LevelThree]= Lock;
preserve[Shift+Lock+LevelThree]= Lock;
不幸的是,无论是 Archwiki(有一个非常好的 xkb 配置指南)还是 xkb 的官方网站(一般没有太多信息)似乎都没有任何关于此的信息。
答案1
XFree86 将其记录在如何进一步增强XKB配置;定义新布局。为了读者的利益复制相关片段,
通常,列表中引入的所有修饰符
modifiers=<list of modifiers>
都会用于移位级别计算,然后被丢弃。有时这是不可取的。如果您想使用修饰符进行班次计算但又不想丢弃它,您可以在 中列出preserve[<combination of modifiers>]=<list of modifiers>
。这意味着,对于给定的组合,所有列出的修饰符都将被保留。如果保留 Lock 修饰符,则结果符号将传递到内部大写例程,无论它是否已用于移位级别计算。