XKB 透明映射修改器级别

XKB 透明映射修改器级别

我在第一级和第二级使用的布局不是 QWERTY。

    key <AC06> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [               m,               M,        Left,        Home ]
    };
    key <AB01> {
        type= "ALPHABETIC",
        symbols[Group1]= [               x,               X ]
    };

我希望任何包含 Ctrl 的组合键(左 Ctrl 或左右 ctrl)将布局更改回 QWERTY 按键。

因此,如果我输入Ctrl+<AB01>我想要得到Ctrl+z,如果我输入ctrl+shift+<AB01>我想要Ctrl+shift+zCtrl+<AC06>=Ctrl+h

xkb 可以做这样的事情吗?

答案1

有两个重要的文件夹:

  • /usr/share/X11/xkb/symbols是大多数发行版上非 Qwerty 布局的位置。
  • /usr/share/X11/xkb/types用于修饰符(如CtrlShift)行为。

Ctrl它有 4 个官方级别,与、ShiftLock(又名)兼容CapsLock
我在以下位置添加了这段代码/usr/share/X11/xkb/types/level5

type "QWERTY_CONTROL" {
    modifiers = Shift+Control+Lock;
    map[None] = Level1;
    map[Shift] = Level2;
    map[Control] = Level3;
    map[Shift+Control] = Level4;
    preserve[Control] = Control;
    preserve[Shift+Control] = Control;
    map[Lock] = Level2;
    map[Lock+Shift] = Level1;
    map[Lock+Control] = Level4;
    map[Lock+Shift+Control] = Level3;
    preserve[Lock+Control] = Control;
    preserve[Lock+Shift+Control] = Shift+Control;
    level_name[Level1] = "Base";
    level_name[Level2] = "Shift";
    level_name[Level3] = "Alt Base";
    level_name[Level4] = "Shift Alt";
};

我在第 2 行之后添加了它partial default xkb_types "default" {
现在您应该使用类型名称QWERTY_CONTROL而不是FOUR_LEVEL_ALPHABETIC.

这是键盘布局的代码。我将我的添加到/usr/share/X11/xkb/symbols/oo

partial alphanumeric_keys
xkb_symbols "half_qwerty" {
    augment "level5"
        name[Group1]="french ergodox compat";

    key.type[Group1] = "QWERTY_CONTROL";

    key <LatA> {[egrave, Egrave, a,A]};
    key <LatS> {[eacute, Eacute, s,S]};
    key <LatD> {[p, P, d,D]};
    key <LatF> {[apostrophe, degree, f,F]};

};

然后跑去setxkbmap oo -variant half_qwerty尝试一下。
您应该在中间行得到è( egrave)、é( eacute)p和。 如果你将它们与 一起使用,它仍然是, ,和。'
Ctrlasdf

注:我在几个软件上测试过

  • 它适用于:MPV、Dolphin、Gedit、LibreOffice、Firefox、ST+ZSH、ST+NeoVim 和 Rofi。
  • 它在 Chromium 上效果不佳。

相关内容