我正在尝试绘制地图:
Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right
在 X 下全局使用。我的想法是我不想经常离开我的主行来使用箭头键,所以我将使用 Super modifier + hjkl 来模拟 X 下的箭头键。有什么办法可以做到这一点吗?
我尝试过的一件事是使用以下配置的 xbindkeys + xte:
"xte 'keydown Up' 'keyup Up'"
Mod4+k
"xte 'keydown Down' 'keyup Down'"
Mod4+j
"xte 'keydown Left' 'keyup Left'"
Mod4+h
"xte 'keydown Right' 'keyup Right'"
Mod4+l
但是从我按下按键到注意到任何结果之间似乎存在很大的延迟,并且大多数时候根本没有任何事情发生。
有没有更优雅的方法可以做到这一点并且实际上没有延迟?
答案1
Capslock + HJKL 箭头键
创建 ~/.Xmodmap 并将其放入其中:
clear Lock keycode 66 = ISO_Level3_Shift
将
Left
,Down
,Up
,Right
作为第三项添加到/usr/share/X11/xkb/symbols/us
(第一部分) 中的 h,j,k,l 键条目中:key { [ h, H, Left, Left ] }; key { [ j, J, Down, Down ] }; key { [ k, K, Up, Up ] }; key { [ l, L, Right, Right ] };
跑步
xmodmap ~/.Xmodmap
替代方案:Capslock 用作 Control,Control_L + HJKL 用作箭头键
这是我当前的设置。我取消了 Control_L 作为控制键的映射,并将其用作特殊修饰符 (ISO_Level3_Shift),它对应于/usr/share/X11/xkb/symbols/us
hjkl 映射文件中的第三个条目。
我像以前一样修改了 /usr/share/X11/xkb/symbols/us 的第一节:
key { [ h, H, Left, Left ] }; key { [ j, J, Down, Down ] }; key { [ k, K, Up, Up ] }; key { [ l, L, Right, Right ] };
然后我将其放入我的 ~/.Xmodmap 文件中:
clear Control keycode 66 = Control_L add Control = Control_L add Control = Control_R keycode 37 = ISO_Level3_Shift
keycode 66
是 capslock,keycode 37
左控制键
- 运行 xmodmap ~/.Xmodmap
通过此设置,我可以使用 Control_L + hjkl 箭头键以及使用 Control_L + caps + hl 跳过单词。简单!
答案2
上述变化/usr/share/X11/xkb/符号/us对我来说不起作用:
加载新键盘描述时出错
但在查看了大量相互矛盾的操作指南后,我想出了一个解决方案,将左超级键(左 Windows 键/Mod4)与 hjkl 组合映射到左、下、上、右。这是一个系统范围的设置。
};
将此块添加到第一部分(就在之前)的末尾/usr/share/X11/xkb/符号/us:
//hjkl
//AltGr + hjkl
key <AC06> { [ h, H, Left ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] }; //see below!
第一行键将 AltGr+h 映射到左键。
最后一行键使左超键的行为类似于 AltGr。
如下所示:
Super + h -> 向左
Super + j -> 向下
Super + k -> 向上
Super + l -> 向右
为了应用新设置,请运行 setxkbmap 或重新启动系统。
重要的:这显然会禁用超级键,因此如果您实际上将超级键用于其他目的(例如将窗口移动到另一个工作区),则不应像这样重新映射它。
为了使用 Caps Lock 而不是 Super,请将最后一个键行更改为:
key <CAPS> { [ ISO_Level3_Shift ] };
这是我的配置文件的完整第一部分:
default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "English (US)";
// Alphanumeric section
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ e, E ] };
key <AD04> { [ r, R ] };
key <AD05> { [ t, T ] };
key <AD06> { [ y, Y ] };
key <AD07> { [ u, U ] };
key <AD08> { [ i, I ] };
key <AD09> { [ o, O ] };
key <AD10> { [ p, P ] };
key <AD11> { [ bracketleft, braceleft ] };
key <AD12> { [ bracketright, braceright ] };
key <AC01> { [ a, A ] };
key <AC02> { [ s, S ] };
key <AC03> { [ d, D ] };
key <AC04> { [ f, F ] };
key <AC05> { [ g, G ] };
key <AC06> { [ h, H ] };
key <AC07> { [ j, J ] };
key <AC08> { [ k, K ] };
key <AC09> { [ l, L ] };
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl ] };
key <AB01> { [ z, Z ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C ] };
key <AB04> { [ v, V ] };
key <AB05> { [ b, B ] };
key <AB06> { [ n, N ] };
key <AB07> { [ m, M ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <BKSL> { [ backslash, bar ] };
// End alphanumeric section
//hjkl
//AltGr + hjkl
key <AC06> { [ h, H, Left ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] };
};
我希望这对某人有帮助......
如果有人有更好的解决方案,请告诉我。
编辑:在 Fedora 上测试。
答案3
这个在 Arch 上对我有用。它将 Caps+hjkl 重新映射到箭头键,将 Shift+Caps 重新映射到 Caps。
输入以下内容~/.Xmodmap
:
! Remap Caps Lock to special modifier, but still allow Shift+Caps to toggle Caps Lock
clear lock
clear mod5
add lock = Mode_switch
keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
keycode 43 = h H Left Left
keycode 44 = j J Down Down
keycode 45 = k K Up Up
keycode 46 = l L Right Right
重新启动或者设置xmodmap ~/.Xmodmap
如果你收到如下错误:
X Error of failed request: BadValue (integer parameter out of range for operation)
这可能意味着您需要清除除mod5
(当前设置为 的任何内容Mode_switch
)之外的其他内容。使用 检查您当前的修饰符映射xmodmap
。
答案4
没有 sudo需要,源自这里,经过修改,使其与 结合时也能发挥作用Alt。
创建一个file
包含以下内容:
! remove Caps Lock
clear lock
! remove Lock = Caps_Lock
! remove Shift = Caps_Lock
keycode 66 = NoSymbol NoSymbol
keycode 66 = ISO_Level3_Shift
keysym h = h H NoSymbol NoSymbol Left Left
keysym j = j J NoSymbol NoSymbol Down Down
keysym k = k K NoSymbol NoSymbol Up Up
keysym l = l L NoSymbol NoSymbol Right Right
! some sugar
keysym o = o O NoSymbol NoSymbol BackSpace NoSymbol
keysym i = i I NoSymbol NoSymbol Delete NoSymbol`
调用
xmodmap file
它映射AltGr到Caps而不是Super,因此您可能宁愿设置
keycode 66 = Super_L
(或xev
击中时给予你的任何奖励Super)
糖部分将退格键和 Del 作为对 i 和 o 的特殊分配,您可以省略它,或者将其视为奖励或动力来自行扩展/调整它;)
PS:如果尝试一下,请通过调用重置“默认”映射
setxkbmap