Seu formato está desativado. Veja a seção 4.3 deste documento antigo ou a seção desta nova versão . O Guia não confiável de Doug Palmer é um pouco datado, mas também um bom recurso.
Você tentou:
! model layout variant = keycodes types compat symbols geometry
current current current = current current current current current
Especificamente, o lado direito do =
aceita um único argumento. Na linha !
, o lado direito é um tipo único de arquivo - somente um {{strong> códigos de teclas, tipos, compat, símbolos, geometria } é permitido. Nas outras linhas, o lado direito é um único argumento que significa:
- um único arquivo encontrado no subdiretório tipo (
test1
) - uma sub-rotina definida em tal arquivo (
test1(foo)
) - uma adição a uma correspondência anterior (
+test2
ou+test2(bar)
) - vários arquivos / sub-rotinas unidos (
test1+test1(foo)+test2(bar)+test3(baz)
)
O lado esquerdo é um filtro; você pode incluir quantos quiser destes.
Basicamente, as regras criam conjuntos de arquivos separados para cada um desses tipos.
// KEYCODES SECTION
// load keycodes based on model specified
! model = keycodes
test1 = test1
// ^^^^^^^^^^^^^^
// "if model=test1,
// load the default in the file keycodes/test1"
// load keycodes based on layout specified
! layout = keycodes
test1 = +test1(us)
// ^^^^^^^^^^^^^^
// "if layout=test1,
// also load stanza "us" in the file keycodes/test1"
// all at once
! model layout variant option = keycodes
test2 test2 test2 test2 = test1+test1(de)+test1(var2)+test1(opt2)
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// "if model=test2 and layout=test2 and... ,
// load the default stanza in file keycodes/test1,
// then load stanza "de" in file keycodes/test1, ...
////////////////
// GEOMETRY SECTION
// load geometry based on model specified
! model = geometry
test1 = test1
* = test3 // any other model
Com essas regras definidas, você pode jogar com setxkbmap -print
para ver suas regras em ação:
$ setxkbmap -I/path/to/my/xkb -rules test1 -model test1 -print
xkb_keymap {
xkb_keycodes { include "test1" };
xkb_geometry { include "test1" };
};
// no xkb_symbols or other sections of the map with only the rules above
$ setxkbmap -I/path/to/my/xkb -rules test2 -model test1 -layout test1 -print
xkb_keymap {
xkb_keycodes { include "test1+test1(us)" };
xkb_geometry { include "test1" };
};
$ setxkbmap -I/path/to/my/xkb -rules test2 -model test2 -layout test2 -variant test2 -option test2 -print
xkb_keymap {
xkb_keycodes { include "test1+test1(us)+test1(var1)+test1(opt2)" };
xkb_geometry { include "test3" };
};
Esse é o básico de como as regras funcionam, mas é claro que pode ficar muito mais complicado.
-
%l
e%v
são variáveis com o l ayout e v ariant (%m
também pode ser usado para o odel m ) -
%(v)
quebra a expansão entre parênteses, então%l%(v)
rendelayout(variant)
- se vários layouts / variantes forem definidos, eles estarão acessíveis como uma matriz e você precisará adicionar um índice:
%l[1]
(%l
não funcionará) - se vários layouts / variantes estiverem definidos, adicione
:2
(ou:3
ou:4
) para restringir os arquivos carregados ao segundo (ou terceiro ou quarto) layout
Aqui está uma seção de regras muito básicas que incluirá vários layouts corretamente:
// setxkbmap -layout foo -variant foo1
! model layout = symbols
* * = %l%(v)
// setxkbmap -layout foo,bar -variant foo1,bar1
! model layout[1] = symbols
* * = %l[1]%(v[1])
// setxkbmap -layout foo,bar -variant foo1,bar1
! model layout[2] = symbols
* * = +%l[2]%(v[2]):2
// setxkbmap -layout foo,bar,baz -variant foo1,bar1,baz1
! model layout[3] = symbols
* * = +%l[3]%(v[3]):3
// setxkbmap -layout foo,bar,baz,bat -variant foo1,bar1,baz1,bat1
! model layout[4] = symbols
* * = +%l[4]%(v[4]):4
Agora, você pode carregar layouts de teste em setxkbmap
e ver se estão sendo adicionados.
$ setxkbmap -I/path/to/my/xkb -rules test -model test1 \
-layout test1,test2,test3 \
-variant test1,testA,testB -print
xkb_keymap {
xkb_keycodes { include "test1+test1(us)" };
xkb_symbols { include "test1(test1)+test2(testA):2+test3(testB):3" };
xkb_geometry { include "test1" };
};