Latching group em mapeamentos de protocolo xmodmap / core (XChangeKeyboardMapping ())

1

Essa questão provavelmente deve ser retrocomputada, já que as pessoas devem usar o XKB, mas estou realmente curioso para saber como elas travaram a troca de grupo com xmodmap / XChangeKeyboardMapping() .

Eu li o xmodmap man e a documentação do X11 lib, e parece que, para ter, digamos, layout de teclado em inglês e russo, é necessário mapear keysyms para algum keycode (como [code_for_letter_l] --> XK_l XK_L XK_Cyrillic_de XK_Cyrillic_DE ) e, em seguida, mapear alguns códigos para MODE_SWITCH.

Pressionar este código junto com L fornece a letra russa "Д".

Mas como posso trancar isso? Existe o modificador Lock, mas ele só pode ser usado com o XK_Caps_Lock keysym (e o ShiftLock que eu não entendo).

Adicionar bloqueio a MODE_SWITCH não tem efeito.

Com o mapa de teclado do console do Linux, posso adicionar o grupo a, digamos, AltGr e, em seguida, adicionar um código de acesso a AltGr_Lock para que ele seja travado. E isso funciona. Mas como faço isso no X?

Eu verifiquei vários modmaps para layouts cirílicos e outros não-latinos (as antigas distribuições têm muitos deles) e em todos os casos as pessoas usavam capslock para isso ou não tinham trava / trava.

Então, eu vim a idéia de que não era possível mudar o layout com teclas como "CTRL + Shift" antes do XKB (antes de 1996?), mas é ridículo.
Estou certo?

    
por user996142 27.06.2017 / 04:17

1 resposta

1

Em primeiro lugar, isso é chamado de bloqueio porque trava significa que a chave afetará apenas a próxima chave.

Não há nenhuma maneira de bloquear o grupo no protocolo Core, mas as extensões XKB adicionam algumas chaves de acordo com ISO / IEC 9995 .

XKB, Apêndice C. Novos KeySyms: ISO NEXT GROUP keysymdefs.h

#define XK_ISO_Next_Group 0xfe08

Por isso, adicionei keycode 133 = ISO_Next_Group_Lock a ~/.xmodmap e não a tecla Win muda meus grupos

    
por 01.07.2017 / 02:50

Tags