![XKB 透明映射修改器级别](https://linux22.com/image/180223/XKB%20%E9%80%8F%E6%98%8E%E6%98%A0%E5%B0%84%E4%BF%AE%E6%94%B9%E5%99%A8%E7%BA%A7%E5%88%AB.png)
我在第一级和第二级使用的布局不是 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+z
。Ctrl+<AC06>
=Ctrl+h
等
xkb 可以做这样的事情吗?
答案1
有两个重要的文件夹:
/usr/share/X11/xkb/symbols
是大多数发行版上非 Qwerty 布局的位置。/usr/share/X11/xkb/types
用于修饰符(如Ctrl
或Shift
)行为。
Ctrl
它有 4 个官方级别,与、Shift
和Lock
(又名)兼容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
和。 如果你将它们与 一起使用,它仍然是, ,和。'
Ctrl
a
s
d
f
注:我在几个软件上测试过
- 它适用于:MPV、Dolphin、Gedit、LibreOffice、Firefox、ST+ZSH、ST+NeoVim 和 Rofi。
- 它在 Chromium 上效果不佳。