键盘重新映射 [Alt_L] + {ijkl} 为箭头 {上,左,下,右}

键盘重新映射 [Alt_L] + {ijkl} 为箭头 {上,左,下,右}

我想将“ijkl”与 alt 一起使用,起到箭头键的作用。例如 Alt+i = 向上,Alt+K = 向下等等。

我努力了修改映射下列的这个答案答案说 Alt 修饰键是 xmodmap 中的第三列。但是, xmodmap -e "keycode 31 = i I Up"没有分配给 Alt+i。

我也尝试过绑定键下列的另一个答案。但是这也不起作用。

"xvkbd -xsendevent -text '\[Left]'"
m:0x18 + c:44
alt + j

"xvkbd -xsendevent -text '\[Down]'"
m:0x18 + c:45
alt + k

"xvkbd -xsendevent -text '\[Right]'"
m:0x18 + c:46
alt + l

"xvkbd -xsendevent -text '\[Up]'"
m:0x18 + c:31
alt + i

我将非常感激一个解决方案,最好它不会破坏我拥有的其他 alt 组合,例如 ctrl+alt+t 打开终端等。

编辑:(如果它有助于回答)在我这样做之后修改映射当我运行 xev 并按 Alt+i 时重新分配它返回以下内容。

KeyPress event, serial 37, synthetic NO, window 0x2e00001,
    root 0x66b, subw 0x0, time 35626163, (161,-15), root:(261,144),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 37, synthetic NO, window 0x2e00001,
    mode NotifyGrab, detail NotifyAncestor

KeyPress event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusIn event, serial 37, synthetic NO, window 0x2e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 37, synthetic NO, window 0x0,
    keys:  4294967216 0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 37, synthetic NO, window 0x2e00001,
    root 0x66b, subw 0x0, time 35628444, (161,-15), root:(261,144),
    state 0x18, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

首先,我不知道为什么Shift_L出现。其次,它表明向上按键甚至以某种方式被注册,但它没有任何效果,例如它不会向上移动光标。

(我使用 Ubuntu 20.04)

答案1

我通过编辑/usr/share/X11/xkb/符号目录。由于我使用德语键盘布局,因此对我来说这是./德文件。我在第一个块中添加/更改了以下几行:

xkb_symbols“基本”{

...

key <AD08>  { [         i,          I,    Up,          Up ] };
key <AC07>  { [         j,          J,    Left,        Left ] };
key <AC08>  { [         k,          K,    Down,        Down ] };
key <AC09>  { [         l,          L,    Right,       Right ] };

...

include "level3(alt_switch)"

};

前几行使得 ALTGR + I = 向上等等,这对我来说没问题,因为我从不使用这些组合。然后最后一行基本上使 ALT 执行与 ALTGR 相同的操作。这可以完成工作,但有点不酷,因为正如您所提到的,它会弄乱其他 ALT 组合。我的解决方案是不要使用 ALT 来执行此操作,而是使用其他处于良好位置并且我从未需要过的键:RWIN。换句话说,我将最后一行替换为

include "level3(rwin_switch)" 

这样,我现在可以方便地用小指按下 RWIN 键,使用 ijkl 作为箭头键进行导航。与其他一些解决方案不同,很棒的一点是,您仍然可以按下 SHIFT + RWIN + L 等来选择文本。

希望这可以帮助 :)

相关内容