将 Super+hjkl 映射到 X 下的箭头键

将 Super+hjkl 映射到 X 下的箭头键

我正在尝试绘制地图:

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 箭头键

  1. 创建 ~/.Xmodmap 并将其放入其中:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. 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 ] };
    
  3. 跑步xmodmap ~/.Xmodmap

替代方案:Capslock 用作 Control,Control_L + HJKL 用作箭头键

这是我当前的设置。我取消了 Control_L 作为控制键的映射,并将其用作特殊修饰符 (ISO_Level3_Shift),它对应于/usr/share/X11/xkb/symbols/ushjkl 映射文件中的第三个条目。

  1. 我像以前一样修改了 /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 ] };
    
  2. 然后我将其放入我的 ~/.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左控制键

  1. 运行 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

它映射AltGrCaps而不是Super,因此您可能宁愿设置

keycode 66 = Super_L

(或xev击中时给予你的任何奖励Super

糖部分将退格键和 Del 作为对 i 和 o 的特殊分配,您可以省略它,或者将其视为奖励或动力来自行扩展/调整它;)

PS:如果尝试一下,请通过调用重置“默认”映射

setxkbmap

相关内容