我想按以下方式重新映射我的键:ctrl+j/k
->left/right
和ctrl+h/l
-> ctrl+left/right
。所以我得到了默认xkb
文件并将以下内容添加到其中。
首先,我定义了一个新类型:
type "newType" {
modifiers= Shift+Control+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
map[Control]= Level3;
map[Control+Lock]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Control";
};
然后我重新定义keysym
了h/j/k/l
:
key <AC06> {
type= "SimonCtrlMap",
symbols[Group1]= [ h, H, Left ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<LEFT>) ]
};
key <AC07> {
type= "SimonCtrlMap",
symbols[Group1]= [ j, J, Left ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<LEFT>, clearmods=Control) ]
};
key <AC08> {
type= "SimonCtrlMap",
symbols[Group1]= [ k, K, Right ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<RGHT>, clearmods=Control) ]
};
key <AC09> {
type= "SimonCtrlMap",
symbols[Group1]= [ l, L, Right ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<RGHT>) ]
};
然后我用 加载新xkb
文件xkbcomp
,键映射适用于我的大多数应用程序,例如firefox
, gnome-terminal
, gedit
。然而,在某些应用程序中,键映射不起作用。
例如,在 中vnc-viewer
,如果我按ctrl+j/k
,它将被识别为ctrl+left/right
, 而不是left/right
。
最令人费解的现象是nautilus
,默认的文件浏览器为gnome
,如果我按下l
,它就会被识别为ctrl+l
!
谁能给我一个修复它的建议?我已经看到了链接中提到的multi-group
方法和方法overlay
https://superuser.com/questions/801611/how-to-make-all-applications-respect-my-modified-xkb-layout?newreg=4416b0444d2949079d57d2848f86452a。我不想使用multi-group
方法,因为ctrl
除了我的键映射之外还扮演一些其他角色。而且这个overlay
方法并不能解决我的问题。