Eu vi alguns posts sobre como remapear as teclas de seta no X11 com XKB, mas embora funcionem bem, nenhum método até agora (exceto o uso de grupos diferentes, que se tornam um incômodo de gerenciar com a configuração do teclado do Gnome) parece funcionar juntos com a Windowschave.
Estou tentando remapear meu teclado para que as teclas HJKL me permitam navegar com um arquivo ISO_Level3 modifier
.
Tentei atribuir as teclas de seta diretamente em ISO_Level3 e porRedirecionandoa chave (dou os dois exemplos no código abaixo).
Eles funcionam bem sozinhos (ou seja, posso usar as teclas de seta sozinhos) e também funcionam com CTRLe ALT(ou seja, CTRL+ LVL3+ H= CTRL+ LEFT), mas elesnão trabalhe junto com a chave WIN.
Meu arquivo de símbolo é:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1] = "Satan";
include "us"
// middle row
key <AC06> {
symbols = [ h, H, Left ],
actions = [ NoAction(), NoAction(), Redirect(key=<LEFT>) ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
key <AC10> { [ ISO_Level3_Shift, colon, semicolon, colon ]};
modifier_map Mod5 { ISO_Level3_Shift };
};
Responder1
descrição
Encontrei uma solução que funciona bem para mim na maioria dos casos, mas nem todos os aplicativos parecem interpretar a entrada xkb diretamente. No entanto, foi um pouco mais complexo do que usar o modificador de nível 3. No meu caso, mapeei CAPSLOCK
para definir uma camada de controle chamada Overlay1
.
Eu realmente não entendo o funcionamento interno do xkb, mas parece que esta camada não é afetada por outros modificadores. Com isso, win
+ CAPS
+ {h,j,k.l}
move as janelas (na minha configuração)
a seguir está a seção relevante demeu arquivo xkb:
partial modifier_keys xkb_symbols "xy_caps_overlay" {
replace key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Overlay1_Enable, Overlay1_Enable ],
actions[Group1] = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ]
};
// Movement Section
key <LatH> { Overlay1 = <LEFT> };
key <LatJ> { Overlay1 = <DOWN> };
key <LatK> { Overlay1 = <UP> };
key <LatL> { Overlay1 = <RGHT> };
key <TAB> { Overlay1 = <TAB> };
// Editing Section
key <LatQ> { Overlay1= <Esc> };
key <LatZ> { Overlay1 = <UNDO> };
key <UNDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatY>,modifiers=Control)]
};
key <LatY> { Overlay1 = <REDO> };
key <REDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatZ>,modifiers=Control)]
};
key <LatX> { Overlay1 = <CUT> };
key <LatC> { Overlay1 = <COPY> };
key <LatV> { Overlay1 = <PAST> };
key <LatQ> { Overlay1 = <ESC> };
key <LatU> { Overlay1 = <HOME> };
key <LatI> { Overlay1 = <END> };
key <LatP> { Overlay1 = <PGUP> };
key <AC10> { Overlay1 = <PGDN> };
key <LatD> { Overlay1 = <DELE> };
key <LatB> { Overlay1 = <BKSP> };
key <SPCE> { Overlay1 = <RTRN> };
};
certifique-se de incluir isso partial
em seu layout, como
include "xy(xy_caps_overlay)"
onde xy é o nome do arquivo em que as configurações parciais são gravadas e xy_caps_overlay é o nome real da seção parcial.
observação
Talvez meu arquivo seja um pouco confuso. Mas observe que eu TAMBÉM uso o modificador de terceiro nível (AltGr ou Right Alt) para, às vezes, propósitos sobrepostos, então também posso navegar apenas com a mão direita, mas o uso de AltGr
+ Win
+ {h j k l}
não funciona como esperado.
bônus
(mais abaixo em meus arquivos estão outras coisas interessantes que estou experimentando, mas não estão diretamente relacionadas à sua pergunta, mas você pode estar interessado. Consulte xy_greek_lvl2
a seção para saber como eu uso AltGr
+ ,
ou .
para travar ou mudar o teclado para matemática (grego ) caracteres.) (é um trabalho em andamento, embora um pouco confuso)
Trecho aqui (caso eu mova os arquivos)
key <RTSH> { // Use right shift (with shift) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol ],
actions[Group1] = [ SetMods(modifiers=Shift,clearLocks), LatchGroup(group=2) ]
};
key <AB08> { // use "," for 2nd group (with AltGr) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol, VoidSymbol, VoidSymbol ],
actions[Group1] = [ NoAction(), NoAction(), LatchGroup(group=2) ]