透明地映射修改后的键(使用 xkb)

透明地映射修改后的键(使用 xkb)

我试图模拟数字键盘按键在主键盘上,但我正在与 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

感谢一些现有技术,步骤如下:

  1. 创建当前配置的副本:
xkbcomp $DISPLAY custom.xkb
  1. 编辑生成的custom.xkb.
  2. 找到节的末尾: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";
     };
  1. <AD07>将部分中的键定义替换xkb_symbols为:
     key <AD07> {
         type= "wkafk1",
         symbols[Group1]= [ u, U, NoSymbol],
         actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=<LEFT>,clearmods=Super)]
     };
  1. 编译并使用自定义配置:
xkbcomp custom.xkb $DISPLAY

请注意,这与 Shift 和 Ctrl 键配合使用组合。

相关内容