Como vinculo a tecla AltGr + a um símbolo?

5

Eu quero vincular AltGr + W a æ , e algumas outras combinações, como posso fazer isso? Eu também preciso de AltGr + Deslocamento + W para Æ .

Normalmente, uso setxkbmap para alterar o mapa de teclado.

    
por Alice Ryhl 20.05.2015 / 17:31

3 respostas

2

Você pode usar isso com o mapa XKB personalizado. Eu recomendo que você copie o mapa atual com xkbcomp $DISPLAY dump.xkb , edite e carregue com xkbcomp newmap.xkb $DISPLAY . O arquivo de despejo é muito grande e tem muitas informações supérfluas.

A maneira mais fácil de editar é ver como o altgr é usado no mapa atual. Geralmente é o modificador ISO_LEVEL3. Se o seu mapa de chaves atual não usa altgr, você pode tentar carregar um que faça para ver como isso pode ser feito. Por exemplo, -layout us -variant altgr-intl é bastante extenso e tem a maioria das chaves européias, se não todas. Abaixo está um pequeno resumo do que está acontecendo.

O xkb obtém os códigos-chave do kernel, define um rótulo para cada um e usa esse rótulo e as teclas modificadoras para decidir que keysym ele deve produzir. Cada chave tem um tipo atribuído a ela que define quais teclas modificadoras ela espera e o que deve ser enviado para cada combinação. Olhando para o despejo que você obteve com xkbcomp : os rótulos estão definidos em xkb_keycodes , tipos em xkb_types e label-to-keysym em xkb_symbols . Destes, xkb_symbols é o que você deseja editar e referenciar os outros dois para saber o que alterar. Você também pode simplesmente olhar para o xkb_symbols e descobrir como ele está sendo feito no momento e editá-lo conforme apropriado.

A seção

xkb_types contém diferentes níveis de modificadores para definições de chave e você desejará um que tenha modos altgr e shift. Exemplo:

type "FOUR_LEVEL_ALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level4;
    map[Shift+Lock+LevelThree]= Level3;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};

Isso significa que a chave marcada como FOUR_LEVEL_ALPHABETIC tem quatro modos. Normal, shift / caps, altgr, altgr-shift que soa como o que você está procurando.

Agora você quer descobrir qual é o código-chave para w se ainda não o conhece. xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/ /p' fornece o código-chave para as teclas que você pressiona. grep está lá para tornar a saída mais legível.

Faça referência cruzada ao código que você obteve com a seção xkb_keycodes do mapa de dump que você recebeu anteriormente. Para mim, w dá keycode 25. less o despejo e encontra o keycode correto em forma de <LABEL> = ##; , exemplo <AD02> = 25; . Ou cat dump.xkb| grep ' = 25;' Label é apenas um nome que o xkb usa para referenciar a chave em seções posteriores.

Agora que você tem o marcador, vá para xkb_symbols , que realmente mapeia os marcadores para os teclados. O formato é

key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, aring, Aring ]
    };

type= é o tipo que você quer da seção xkb_types , symbols[Group1]= tem um keysym para cada um dos modos exigidos pelo tipo. Novamente, normal, shift / caps, altgr, shift-altgr para esse tipo. [Group1] , até onde entendi, é um método de usar vários mapas de teclado que você pode alterar rapidamente com uma chave de bloqueio configurada. Eu não uso grupos, então tudo é group1 para mim.

para encontrar todos os diferentes teclados que você pode usar aqui, confira /usr/include/X11/keysymdef.h . Os dois símbolos que você está procurando são ae para æ e AE para Æ.

key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, ae, AE ]
    };

Eu posso ter divagado um pouco. Confira a página do Arch Wiki no XKB, é bom, não importa qual OS ou distro você esteja usando.

    
por 20.05.2015 / 22:35
4

Isso é fácil de fazer com xmodmap . Você pode usar uma diretiva keysym para alterar os keyyms associados a uma chave. Isso afeta todas as chaves que estão atualmente enviando este keysym com qualquer combinação de modificadores. Para caracteres de impressão normais, os quatro keyyms são os únicos para a tecla simples, a tecla com Shift , a tecla com AltGr e a tecla com AltGr + Shift respectivamente.

keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE

Coloque essas diretivas em um arquivo, por exemplo, ~/.Xmodmap e carregue-os com xmodmap ~/.Xmodmap . O arquivo chamado ~/.Xmodmap é carregado automaticamente quando você faz login em alguns ambientes (isso depende da sua variante unix e ambiente de área de trabalho).

Você pode encontrar os nomes de keysym em /usr/share/X11/locale/en_US.UTF-8/Compose ou /usr/include/X11/keysymdef.h (os locais do Debian podem variar em outros sistemas). Se você não souber o nome do keysym de um símbolo, poderá usar seu número Unicode: U seguido por dígitos hexadecimais, por exemplo,

keysym W = w W U00e6 U00c6
    
por 21.05.2015 / 03:49
0

No seu arquivo (/usr/share/X11/xkb/symbols/XY ), sob sua variante de teclado, localize a linha { [ w, W, . Estes dois, obviamente, correspondem a w maiúsculo e minúsculo. Agora depois deles, a terceira e quarta entradas correspondem ao que você obtém quando pressiona AltGr + w e AltGr + Deslocamento + w respectivamente.

Você deve apenas substituir os terceiro e quarto caracteres pelos seus desejados ou, se estiverem ausentes, adicioná-los.

De acordo com a Wikipedia, os pontos unicode (ae, AE) são U + 00E6 e U + 00C6, respectivamente, então sua nova linha editada do arquivo de símbolos deve estar (omitindo o sinal +)

{ [         w,          W,   U00E6,   U00C6 ]   };

Uma atualização do sistema atualizando este arquivo sobrescreve, então é melhor você manter uma cópia deste arquivo editado em algum lugar da sua casa e sempre que ele for sobrescrito por uma atualização substitua-o pelo comando

sudo cp /YOUR/BACKUP/SYMBOL_FILE /usr/share/X11/xkb/symbols/SYMBOL_FILE
    
por 13.05.2016 / 21:08