OK, encontrei uma solução. Não é realmente ideal, mas obtém o comportamento desejado.
Primeiro, eu despejei o estado completo da configuração do teclado usando
$ xkbcomp $DISPLAY - > now.xkb
Então eu encontrei as linhas
interpret Overlay1_Enable+AnyOfOrNone(all) {
action= LockControls(controls=Overlay1);
};
e alterou para
interpret Overlay1_Enable+AnyOfOrNone(all) {
action= SetControls(controls=Overlay1);
};
que impede que o modificador seja "pegajoso", isto é, aplica-se apenas quando você está segurando a tecla.
Então peguei a chave que costumava ser minha ISO_Level5_Shift:
key <TAB> {
type= "ONE_LEVEL",
symbols[Group1]= [ ISO_Level5_Shift ]
};
e alterou para Overlay1_Enable:
key <TAB> {
type= "ONE_LEVEL",
symbols[Group1]= [ Overlay1_Enable ]
};
Em seguida, para cada chave em que eu queria que a alteração tivesse efeito, adicionei uma definição de sobreposição:
key <AD07> {
type= "EIGHT_LEVEL",
overlay1= <PGUP>,
symbols[Group1]= [ g, G, asterisk, G, Prior, G, Greek_gamma, Greek_GAMMA ]
};
Em seguida, reaplicou tudo com
$ xkbcomp now.xkb $DISPLAY
Documentação útil:
- Página XKB no ArchLinux Wiki
- Guia do XKB de Doug Palmer