我试图模拟数字键盘按键在主键盘上,但我正在与 xkb 斗争。
如何将 <LWIN> + <AD07> 转换为“左”? (又名超级+ u)
它需要与 Shift、Ctrl(最好也是 Alt)配合良好。
我最接近的是:
type "wkafk1" {
modifiers = Shift+Super;
map[Shift]= Level2;
map[Super] = Level3;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Fn";
};
...
key <AD07> {
type= "wkafk1",
symbols[Group1]= [ u, U, Left ]
};
但 Shift+Super+u 未被处理。
这个也很接近:
type "wkafk1" {
modifiers = Shift+Super;
map[Shift]= Level2;
map[Super] = Level3;
map[Shift+Super]=Level4;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Fn";
level_name[Level4] = "Fn Shift";
};
...
key <AD07> {
type= "wkafk1",
symbols[Group1]= [ u, U, Left, Shift+Left ]
};
但它没有编译,因为我不知道如何发出修改后的符号(不允许使用 Shift+Left)。
我是否需要带有 action= RedirectKey(...) 的“解释”语句?
答案1
感谢一些现有技术,步骤如下:
- 创建当前配置的副本:
xkbcomp $DISPLAY custom.xkb
- 编辑生成的
custom.xkb
. - 找到节的末尾:
xkb_types
并添加以下内容:
type "wkafk1" {
modifiers = Shift+Super;
map[Shift] = level2;
map[Super] = level3;
map[Super+Shift] = level3;
level_name[Level1] = "Base";
level_name[Level2] = "Caps";
level_name[Level3] = "Arrows";
};
<AD07>
将部分中的键定义替换xkb_symbols
为:
key <AD07> {
type= "wkafk1",
symbols[Group1]= [ u, U, NoSymbol],
actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=<LEFT>,clearmods=Super)]
};
- 编译并使用自定义配置:
xkbcomp custom.xkb $DISPLAY
请注意,这与 Shift 和 Ctrl 键配合使用组合。