我看過一些關於如何使用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) ]