Remapeamento do teclado [Alt_L] + {ijkl} como seta {Cima, Esquerda, Baixo, Direita}

Remapeamento do teclado [Alt_L] + {ijkl} como seta {Cima, Esquerda, Baixo, Direita}

Quero usar 'ijkl' junto com alt para agir como teclas de seta. ou seja, Alt+i = Para cima, Alt+K = Para baixo etc.

eu tenteixmodmapseguindoesta resposta. A resposta diz que a chave modificada Alt é a terceira coluna no xmodmap. No entanto, xmodmap -e "keycode 31 = i I Up"não atribui até Alt+i.

Eu também tenteixbindkeysseguindooutra resposta. Mas isso não funciona tão bem.

"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

Eu apreciaria muito uma solução, de preferência que não quebre outras combinações alt que tenho, como ctrl+alt+t para abrir o terminal, etc.

editar: (se ajudar na resposta) depois que eu fizerxmodmapreatribuição quando executo xev e pressiono Alt+i ele retorna o seguinte.

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

Primeiro, não sei por queShift_LAparece. Em segundo lugar, mostra queAcimakeypress até é registrado de alguma forma, mas não tem nenhum efeito, por exemplo, não move o cursor para cima.

(Eu uso Ubuntu 20.04)

Responder1

Eu fiz isso editando o arquivo correspondente no/usr/share/X11/xkb/symbolsdiretório. Como eu uso um layout de teclado alemão, para mim é isso./dearquivo. Eu adicionei/alterei as seguintes linhas no primeiro bloco:

xkb_symbols "básico" {

...

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)"

};

As primeiras linhas fazem com que ALTGR + I = Up e assim por diante, o que é bom para mim, já que nunca uso essas combinações. Então a última linha essencialmente faz com que ALT faça o mesmo que ALTGR. Isso funciona, mas não é nada legal, pois, como você mencionou, atrapalha as outras combinações ALT. Minha solução para isso foi simplesmente não usar ALT para isso, mas alguma outra chave que está em uma boa posição e da qual nunca precisei: RWIN. Em outras palavras, substituí a última linha por

include "level3(rwin_switch)" 

Dessa forma, agora posso pressionar RWIN convenientemente com meu dedo mindinho para navegar com ijkl como teclas de seta. O bom é que, ao contrário de algumas outras soluções, você ainda pode pressionar, por exemplo, SHIFT + RWIN + L para selecionar o texto.

Espero que isto ajude :)

informação relacionada