我已看到一些关于如何使用 XKB 在 X11 下重新映射箭头键的帖子,但尽管它们大部分工作正常,但到目前为止似乎没有任何方法(除了使用不同的组,这在使用 Gnome 键盘设置时会变得很麻烦)可以与该Windows键一起使用。
我正在尝试重新映射我的键盘,以便 HJKL 键允许我使用 进行导航ISO_Level3 modifier
。
我尝试直接在 ISO_Level3 中分配箭头键,并通过重定向关键(我在下面的代码中给出了两个例子)。
它们可以单独工作(即我可以单独使用箭头键)并且它们也可以与CTRLand一起使用ALT(即CTRL+ LVL3+ H= CTRL+ LEFT)但是它们不能与 WIN 键一起使用。
我的符号文件是:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1] = "Satan";
include "us"
// middle row
key <AC06> {
symbols = [ h, H, Left ],
actions = [ NoAction(), NoAction(), Redirect(key=<LEFT>) ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
key <AC10> { [ ISO_Level3_Shift, colon, semicolon, colon ]};
modifier_map Mod5 { ISO_Level3_Shift };
};
答案1
描述
我找到了一种在大多数情况下都适用的解决方案,但并非所有应用程序似乎都能直接解释 xkb 输入。不过,这比使用 3 级修饰符要复杂一些。就我而言,我映射CAPSLOCK
以设置一个名为 的控制层Overlay1
。
我不太了解 xkb 的内部工作原理,但似乎该层不受其他修改器的影响。这样,win
++CAPS
就{h,j,k.l}
可以移动窗口(在我的设置中)
以下是相关部分我的 xkb 文件:
partial modifier_keys xkb_symbols "xy_caps_overlay" {
replace key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Overlay1_Enable, Overlay1_Enable ],
actions[Group1] = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ]
};
// Movement Section
key <LatH> { Overlay1 = <LEFT> };
key <LatJ> { Overlay1 = <DOWN> };
key <LatK> { Overlay1 = <UP> };
key <LatL> { Overlay1 = <RGHT> };
key <TAB> { Overlay1 = <TAB> };
// Editing Section
key <LatQ> { Overlay1= <Esc> };
key <LatZ> { Overlay1 = <UNDO> };
key <UNDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatY>,modifiers=Control)]
};
key <LatY> { Overlay1 = <REDO> };
key <REDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatZ>,modifiers=Control)]
};
key <LatX> { Overlay1 = <CUT> };
key <LatC> { Overlay1 = <COPY> };
key <LatV> { Overlay1 = <PAST> };
key <LatQ> { Overlay1 = <ESC> };
key <LatU> { Overlay1 = <HOME> };
key <LatI> { Overlay1 = <END> };
key <LatP> { Overlay1 = <PGUP> };
key <AC10> { Overlay1 = <PGDN> };
key <LatD> { Overlay1 = <DELE> };
key <LatB> { Overlay1 = <BKSP> };
key <SPCE> { Overlay1 = <RTRN> };
};
确保将其包含partial
在你的布局中,例如
include "xy(xy_caps_overlay)"
其中 xy 是写入此部分设置的文件的名称,xy_caps_overlay 是部分部分的实际名称。
笔记
也许我的文件相当混乱。但请注意,有时出于重叠目的,我还使用第三级修饰键(AltGr 或右 Alt),因此我也可以只用右手导航,但使用AltGr
++无法按预期工作。Win
{h j k l}
奖金
(在我的文件中,还有一些我正在试验的其他有趣的东西,但与你的问题没有直接关系,但你可能会感兴趣。请参阅xy_greek_lvl2
部分了解我如何使用AltGr
+,
或.
锁定或移动键盘以输入数学(希腊语)字符。)(这是一个正在进行的工作,虽然有点混乱)
此处摘录(以防我移动文件)
key <RTSH> { // Use right shift (with shift) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol ],
actions[Group1] = [ SetMods(modifiers=Shift,clearLocks), LatchGroup(group=2) ]
};
key <AB08> { // use "," for 2nd group (with AltGr) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol, VoidSymbol, VoidSymbol ],
actions[Group1] = [ NoAction(), NoAction(), LatchGroup(group=2) ]