Remapeando Caps Lock e Shift + Caps Lock no xkb

13

Estou tentando configurar o xkb para que o Caps Lock seja mapeado para a tecla Compose e as funções Shift + Caps Lock sejam o tradicional Caps Lock. Coloquei o seguinte em um novo arquivo chamado /usr/share/X11/xkb/symbols/gdwatson:

partial modifier keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ]
    };
};

Então eu corri setxkbmap -symbols 'pc+us+gdwatson(compose)', que foi concluído com sucesso. Caps Lock funciona como Compor, mas Shift + Caps Lock funciona como Compose em vez de Caps Lock. xkbcomp :0.0revela o seguinte:

key <CAPS> {
    type= "TWO_LEVEL",
    symbols[Group1]= [       Multi_key,       Multi_key ]
};

O mapeamento de símbolo do segundo nível está duplicando o primeiro por algum motivo, em vez do valor separado que tentei fornecer. Alguém tem xkb-fu forte o suficiente para me dizer o que fiz de errado ou como corrigi-lo?

Grant Watson
fonte
1
Eu posso ajudá-lo a fazer isso no Xmodmap, mas não no xkb. Se você quiser isso, responda positivamente (não se esqueça de escrever @mirabilossua resposta para que eu note) em um comentário, então eu vou excluir esse comentário e escrever como resposta (você também deve excluir sua resposta).
mirabilos
1
Na sua primeira linha, deveria partial modifier keysser partial modifier_keys? Sem essa alteração, setxkbmap -symbols 'pc+us+gdwatson(compose)'na verdade sai com um erro, mas com a alteração, obtenho a saída desejada xkbcomp :0.0. No entanto , recebo o efeito colateral indesejado de que pressionar Capslock simultaneamente me coloca no modo Capslock e no modo de composição de teclas.
Billyjmc

Respostas:

11

Isso parece realizar o que você está procurando.

partial modifier_keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ],
        actions[Group1] = [ NoAction(), LockMods(modifiers=Lock) ]
    };
};

Os seguintes recursos são inestimáveis ​​ao lidar com o XKB (vinculei aos espelhos dessas páginas do WayBack Machine para provas futuras):

billyjmc
fonte
Além disso, se você fizer a primeira linha default partial modifier_keys, então você não tem que especificar explicitamente setxkbmap -symbols 'pc+us+gdwatson(compose)', você pode simplesmente fazersetxkbmap -symbols 'pc+us+gdwatson'
billyjmc