xkb:使用键改变 shift 级别而不显示为修饰符

xkb:使用键改变 shift 级别而不显示为修饰符

我想配置 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 ]};

监视击键的程序(例如xevemacs)将看到按键,就好像您按下了一样F21,Shift+F21,F1, 和Shift+F1

相关内容