
Quero saber o que a palavra-chave preserve faz na seção xkb_types de um mapa de teclado xkb personalizado.
Aqui está um exemplo de um arquivo de configuração existente:
type "FOUR_LEVEL_SEMIALPHABETIC" {
modifiers= Shift+Lock+LevelThree;
map[Shift]= Level2;
map[Lock]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Lock+LevelThree]= Level3;
preserve[Lock+LevelThree]= Lock;
map[Shift+Lock+LevelThree]= Level4;
preserve[Shift+Lock+LevelThree]= Lock;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Estou interessado nestas duas linhas:
preserve[Lock+LevelThree]= Lock;
preserve[Shift+Lock+LevelThree]= Lock;
Infelizmente nem o Archwiki, que possui um guia de configuração do xkb muito bom, nem o site oficial do xkb (que não possui muita informação em geral) parecem ter qualquer informação sobre isso.
Responder1
XFree86 documenta isso emComo aprimorar ainda mais a configuração do XKB; Definindo novos layouts. Copiar o fragmento relevante para o benefício do leitor,
Normalmente, todos os modificadores introduzidos na
modifiers=<list of modifiers>
lista são usados para cálculo de nível de mudança e depois descartados. Às vezes isso não é desejável. Se quiser usar um modificador para cálculo de nível de mudança, mas não quiser descartá-lo, você pode listá-lo empreserve[<combination of modifiers>]=<list of modifiers>
. Isso significa que, para uma determinada combinação, todos os modificadores listados serão preservados. Se o modificador Lock for preservado, o símbolo resultante será passado para a rotina interna de capitalização, independentemente de ter sido usado para um cálculo de nível de mudança ou não.