我想将“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 等来选择文本。
希望这可以帮助 :)