O que significa “Chave para escolher o 5º nível” no gnome-keyboard-properties?

14

Existe uma opção para especificar uma chave a ser usada para acessar o 5º nível no teclado em gnome-keyboard-properties ("Teclado" em Hardware nas configurações do Sistema):

Mas se eu definir o 5º nível para AltGr e o terceiro nível para Ctrl Direita e se eu definir a chave 54 da seguinte forma:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

Eu obtenho os seguintes resultados pressionando diferentes variações:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. Então, o que o modificador de 5º nível faz?

  2. Como faço para configurá-lo para que eu possa obter 5 ou 6 caracteres diferentes em uma única tecla (modificada por Shift , Alt Gr e < kbd> Ctrl direita por exemplo)?

por sup 08.05.2011 / 11:41

2 respostas

6

“1. Então, o que o modificador de 5º nível faz? ”

Escolhe o quinto nível. O modificador de segundo nível (apenas o turno normal) escolhe o segundo nível, e o terceiro nível escolhe o terceiro nível.

A razão pela qual o modificador de 5º nível escolhe o quinto nível do quarto nível (logo após o modificador de 3º nível) é que esses três modificadores podem ser combinados de maneiras diferentes para escolher oito nível diferente (isso inclui não usar nenhum dos modificadores, o que é apenas pressionando uma tecla sem tais modificadores). São oito combinações desde 2 ↑ 3 = 8. Para os dois primeiros modificadores existem quatro combinações:

  • Sem modificadores (nível 1)
  • Modificador de 2º nível, a.k.a. shift (nível 2)
  • modificador de nível 3 (nível 3)
  • 2º + 3º modificador (nível 4)

Adicionar o terceiro modificador (5º nível) adiciona mais quatro níveis.

“2. Como faço para configurar 5 ou 6 caracteres diferentes? de uma única chave (modificada por Shift, Alt Gr e Right Ctrl por exemplo) ”

Primeiro, você precisa de um layout que use cinco ou mais caracteres por chave. Você pode escolher um layout existente, mas se quiser simplesmente adicionar mais níveis para o layout que você está usando atualmente, que pode não ser ótimo. Por exemplo, existe o layout de teclado Neo († 1), mas é "otimizado para o idioma alemão", então não é tão bom para a maioria Falantes de inglês.

Ainda assim, pode ser instrutivo ver quais as teclas que o Neo tem escolhido para o modificador de nível 5.

Neo aparentemente chama o modificador de nível 5 para "Mod4". Então, como você pode ver usa a chave à direita da tecla shift esquerda ( LSGT ) e a tecla tecla alt direita / AltGr chave. Isso está em um teclado europeu (105 teclas) que em comparação com o teclado dos EUA (104 teclas) tem um deslocamento estreito à esquerda e tecla de retorno alta e fina. Para um layout de teclado baseado no Teclado dos EUA pode ser necessário - ou preferir - escolher outras teclas.

Escolhendo uma tecla modificadora de nível 5

Na resposta do sup, ele escolhe usar o Xmodmap. Hoje em dia ferramentas como O Setxkbmap é recomendado sobre o Xmodmap. Xkb vem com muitos pré-definidos opções para coisas como escolher o modificador de nível 5. Se você consultar man xkeyboard-config e procure por lv5 você encontrará estas opções:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Portanto, as opções documentadas são a tecla LSGT , a tecla direita chave, a tecla direita do Windows e a tecla esquerda do Windows. Como vimos, Neo usa as duas primeiras opções.

Digamos que você queira usar a opção lv5:ralt_switch_lock com algum layout. Este comando configura o layout us com essa chave modificadora de nível 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Portanto, para qualquer uma das opções documentadas em man xkeyboard-config , use isso como um argumento para -option ao usar o Setxkbmap.

Caso essas opções não sejam suficientes e você queira definir outra chave para ser o modificador de nível 5, é instrutivo olhar para o declarações para essas opções. Eles parecem estar em %código%. A declaração para /usr/share/X11/xkb/symbols/level5 é assim:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

O lado direito de lv5:ralt_switch_lock declara qual chave ou caractere cada nível da chave deve produzir. Isso usa todos os oito possíveis níveis desde que é suposto bloquear o modificador de nível 5 quando pressionado juntamente com outra chave shift de nível 5. Então os níveis 5-8 emitem symbols[Group1] , pois todos esses níveis são acessados mantendo pressionados o deslocamento de nível 5 e alguma combinação das outras teclas de deslocamento (nenhum todos eles). Se você quer apenas o comportamento de mudança e não também o comportamento lock-if-two-pressed, você pode fazer uma declaração mais simples o mesmo arquivo):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

Adicionando níveis extras a um layout

Os layouts Xkb são bem modulares. Você pode incluir layouts e altere-os. Então podemos escolher um layout existente com menos de 5 níveis e adicione alguns níveis a ele.

Você pode criar novos layouts copiando o arquivo com seus layouts para ISO_Level5_Lock , ou onde quer que suas ferramentas Xkb estejam para layouts. Mas isso requer privilégio sudo por isso não é o melhor solução. Como alternativa, você pode copiar a estrutura de diretórios de /usr/share/X11/xkb/symbols/ e coloque seus layouts no diretório apropriado em xkb/ , %código%. Então diga que você criou um arquivo xkb/ . Para usar layouts definidos nesse arquivo, você pode usar o symbols/ opção de xkb-tree/symbols/my-layouts e depois canalizar a saída para -print . este script de wrapper toma os layouts como entrada:

#!/bin/sh

# '-option ""' resets all options.
setxkbmap -option "" -layout "" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

No que diz respeito ao ficheiro com o layout, digamos que queremos para expandir o layout “internacional dos EUA”, que usa quatro níveis. Primeiro de todos nós configuramos as teclas de deslocamento de nível 3 e nível 5 da mesma forma que Neo faz:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

Agora queremos adicionar alguns caracteres extras.Vamos usar apenas os quatro primeiros chaves de layouts Qwerty como um exemplo. Essas chaves são setxkbmap to xkbcomp , que corresponde a Q a R . Primeiro precisamos fazer as chaves capaz de usar até oito níveis:

key.type[Group1] = "EIGHT_LEVEL";

Para os primeiros quatro níveis, para não redefini-los, nós os mapeamos para <AD01> . Então nós adicionamos dois níveis. No nível 5 nós adicionamos as setas <AD04> († 2). No nível 6, adicionamos as teclas de direção. Nosso layout acaba ficando assim:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

Para usá-lo, podemos usar o script wrapper que fizemos:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo é NoSymbol em Xkb; ←↓↑→ .

† 2: Para encontrar os nomes simbólicos que o Xkb usa, procure por um arquivo chamado de(neo) . Deve estar sob um diretório chamado setxkbmap "de(neo)" . Você também pode usar nomes Unicode, por exemplo, keysymdef.h para U + 2192.

    
por Guildenstern 05.11.2017 / 19:41
8

Bem, depois de cavar um pouco:

(1) A chave para escolher o 5º nível faz algumas coisas estranhas (relativas a alguns layouts franceses) que não são relevantes para o que eu queria fazer. Basicamente, ele define qual chave atua como ISO_Level5_Shift. ISO_Level5_Shift é usado em alguns layouts obscuros. Essa resposta é baseada no número de resultados que o Google fornece ao pesquisar "ISO_Level5_Shift" e em estes links .

(2) Não pode ser usado para obter 6 símbolos de uma chave física. Uma maneira de conseguir isso é com o uso do arquivo .xmodmap colocado no diretório $ HOME.

Primeiro, comande

xmodmap -pm

dá o que os símbolos de chaves agem como vários modificadores. No meu sistema, foi como segue:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

o mod3 precisa ser configurado para usar 6 símbolos com uma chave. Isso precisa ser colocado no arquivo .xmodmap:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

Então o xmodmap -pm me deu:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

Onde o código de tecla 94 é a chave que escolhi para atuar como mod3. Códigos de teclas de várias chaves físicas podem ser encontrados com a ferramenta de linha de comando xev (basta executá-lo e pressionar várias teclas, códigos de teclas aparecerão).

Então, se eu colocar no arquivo .xmodmap

keycode 54 = 1 2 3 4 5 6

ou execute

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

Eu recebo seis símbolos diferentes de uma tecla usando altgr, shift e keycode 94 (é uma tecla inútil ao lado do shift esquerdo no meu layout físico).

UPDATE: se você precisa de apenas cinco símbolos, é útil configurá-lo assim:

keycode 54 = 1 2 3 3 5 6

Ocasionalmente acontece comigo que eu recebo 4 em vez de 3, de outra forma.

    
por sup 09.05.2011 / 21:18