1. Então, o que o modificador do 5º nível faz? ”
Escolhe o quinto nível. O modificador do 2º nível (apenas turno regular) escolhe o segundo nível e o 3º nível escolhe o terceiro nível.
O motivo pelo qual o modificador do quinto nível escolhe o quinto nível em vez do quarto (logo após o modificador do terceiro nível) é que esses três modificadores podem ser combinados de maneiras diferentes para escolher oito níveis diferentes (isso inclui o uso de qualquer um dos modificadores, pressionando uma tecla sem esses modificadores). Existem oito combinações desde 2 ↑ 3 = 8. Nos dois primeiros modificadores, existem quatro combinações:
- Sem modificadores (nível 1)
- Modificador de segundo nível, também conhecido como shift (nível 2)
- Modificador de terceiro nível (nível 3)
- 2º + 3º modificador (nível 4)
A adição do terceiro modificador (5º nível) adiciona mais quatro níveis.
"2. Como o configuro para que eu possa obter 5 ou 6 caracteres diferentes de uma única tecla (modificada por Shift Alt Gre , Right
Ctrlpor exemplo)? ”
Antes de tudo, você precisa de um layout que use cinco ou mais caracteres por chave. Você pode escolher um layout existente, mas se você simplesmente deseja adicionar mais níveis ao layout que está usando no momento, isso pode não ser o ideal. Por exemplo, existe o layout do teclado Neo († 1), mas que é “otimizado para o idioma alemão”, não sendo tão bom para a maioria dos falantes de inglês.
Ainda assim, pode ser instrutivo dar uma olhada nas teclas que o Neo escolheu para o modificador de nível 5.
Neo aparentemente chama o modificador de nível 5 para "Mod4". Então, como você pode ver, ele usa a tecla à direita da tecla shift esquerda ( LSGT
) e a tecla alt direita / AltGr
tecla. Isso ocorre em um teclado europeu (105 teclas) que, comparado ao teclado dos EUA (104 teclas), possui um deslocamento estreito para a esquerda e uma tecla de retorno alta e fina. Para um layout de teclado baseado no teclado americano, 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. Atualmente, ferramentas como o Setxkbmap são recomendadas no Xmodmap. O Xkb vem com muitas opções predefinidas para escolher o modificador de nível 5. Se você consultar o
man xkeyboard-config e procurar, lv5
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 LSGT
chave, a tecla alt direita, a tecla direita do Windows e a tecla esquerda do Windows. Como vimos, o Neo usa as duas primeiras opções.
Digamos que você queira usar a lv5:ralt_switch_lock
opção com algum layout. Este comando configura o us
layout com esta chave modificadora de nível 5:
setxkbmap -option "lv5:ralt_switch_lock" us
Portanto, para qualquer uma das opções documentadas man xkeyboard-config
, use isso como argumento ao -option
usar o Setxkbmap.
Caso essas opções não sejam suficientes e você deseje definir outra chave para ser o modificador de nível 5, é instrutivo examinar as declarações dessas opções. Eles parecem estar em
/usr/share/X11/xkb/symbols/level5
. A declaração para se
lv5:ralt_switch_lock
parece com isso:
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 symbols[Group1]
declara qual chave ou caractere cada nível da chave deve produzir. Isso usa todos os oito níveis possíveis, já que é suposto bloquear o modificador de nível 5 quando pressionado junto com outra tecla shift do nível 5. Portanto, os níveis 5 a 8 são emitidos,
ISO_Level5_Lock
pois todos esses níveis são acessados mantendo pressionada a tecla shift do nível 5 e alguma combinação das outras teclas shift (nenhuma para todas elas). Se você deseja apenas o comportamento de turno e não o comportamento de bloqueio se pressionado, você pode fazer uma declaração mais simples (do 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 do Xkb são bastante modulares. Você pode incluir layouts existentes e alterá-los. Assim, podemos escolher um layout existente com menos de 5 níveis e adicionar alguns níveis a ele.
Você pode criar novos layouts copiando o arquivo com seus layouts para
/usr/share/X11/xkb/symbols/
, ou onde quer que suas ferramentas Xkb procurem layouts. Mas isso requer privilégio sudo, portanto, não é a melhor solução. Como alternativa, você pode copiar a estrutura de diretórios xkb/
e colocar seus layouts no diretório apropriado em xkb/
, a saber
symbols/
. Então, diga que você criou um arquivo xkb-tree/symbols/my-layouts
. Para usar os layouts definidos neste arquivo, você pode usar a -print
opção de setxkbmap
e canalizar a saída para xkbcomp
. Este script de wrapper aceita os layouts como entrada:
#!/bin/sh
# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
-print |
xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"
No que diz respeito ao arquivo com o layout, digamos que queremos expandir o layout "internacional dos EUA", que usa quatro níveis. Antes de tudo, configuramos as teclas shift de nível 3 e 5 da mesma maneira que o Neo:
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 as quatro primeiras teclas dos layouts Qwerty como exemplo. Essas chaves são Q
to R
, que correspondem <AD01>
a <AD04>
. Primeiro, precisamos tornar as chaves capazes de usar até oito níveis:
key.type[Group1] = "EIGHT_LEVEL";
Nos quatro primeiros níveis, para não redefini-los, nós os mapeamos NoSymbol
. Então nós adicionamos dois níveis. No nível 5, adicionamos as setas ←↓↑→
(† 2). No nível 6, adicionamos as teclas de direção. Nosso layout acaba 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 criamos:
./setxkbmap-wrapper "my-layouts(mine)"
† 1: Neo está de(neo)
em Xkb; setxkbmap "de(neo)"
.
† 2: para encontrar os nomes simbólicos que o Xkb usa, procure um arquivo chamado keysymdef.h
. Deve estar em um diretório chamado X11/
. Você também pode usar nomes Unicode, por exemplo, U2192
para U + 2192.