我想配置 XKB 以用作Caps Lock生成不同密钥的方式,但我不希望它显示为修饰符。例如:
- F1产生
F21
按键 - Caps Lock+F1产生
F1
按键(即没有修饰符) - Shift+ Caps Lock+F1产生
Shift + F1
按键(仅Shift
算作修饰符)
Caps Lock我通过分配to部分成功了Hyper_R
,但问题是只有当Hyper_R
也设置为修饰符时才有效,例如Mod3
。这意味着Shift+ Caps Lock+F1实际上会产生Shift + Mod3 + F1
任何监听的热键都Shift + F1
不起作用,因为它们不喜欢Mod3
出现。
有没有什么方法可以用来Caps Lock改变某些键的行为,而不实际让它在 X 应用程序中显示为修饰键?
我读过的文档暗示这可以通过高级 XKB 配置实现,但我找不到任何详细信息。
答案1
抱歉,这已经很古老了,但即使对您来说为时已晚,其他人也可能会发现此提示有用:
在您的 中types
,添加:
type "CapsShiftSpecial" {
modifiers= Shift+Hyper;
map[Shift]= Level2;
preserve[Shift]= Shift;
map[Hyper]= Level3;
map[Shift+Hyper]= Level4;
preserve[Shift+Hyper]= Shift;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Hyper";
level_name[Level4]= "Shift Hyper";
};
然后,在symbols
文件中,有类似的内容
key <FK01> { type[group1]="CapsShiftSpecial",
symbols[group1]=[ F21, F21, F1, F1 ]};
监视击键的程序(例如xev
或emacs
)将看到按键,就好像您按下了一样F21,Shift+F21,F1, 和Shift+F1。