Ваш формат отключен. См. раздел 4.3 в этом старом документе или раздел Правил этой новой версии. Ненадежный справочник Дуга Палмера немного устарел, но также является хорошим источником.
Вы пытались:
! model layout variant = keycodes types compat symbols geometry
current current current = current current current current current
В частности, правая часть =
принимает один аргумент. На ! Строка
, правая часть представляет собой файл одного типа — разрешен только один из { кодов клавиш, типов, совместимости, символов, геометрии }. В других строках справа находится один аргумент, означающий:
test1
) test1(foo)
) +test2
или +test2(bar)
) test1+test1(foo)+test2(bar)+test3(baz)
) Левая сторона — это фильтр; вы можете включить столько, сколько хотите из них.
По сути, правила создают отдельные наборы файлов для каждого из этих типов.
// 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
Определив эти правила, вы можете поиграть с setxkbmap -print
, чтобы увидеть ваши правила в действии:
$ 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" };
};
Это основы работы правил, но, конечно, все может быть намного сложнее.
%l
и %v
являются переменными с layout и variant (%m
также может быть используется для mодель) %(v)
заключает раскрытие в круглые скобки, поэтому %l%(v)
дает макет(вариант)
%l[1]
(%l
не будет work ) :2
(или :3
или :4
), чтобы ограничить файлы, загружаемые вторым (или 3-й, или 4-й) макет Вот очень простой раздел правил, который правильно подтянет несколько макетов:
// 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
Теперь вы можете загрузить тестовые макеты в setxkbmap
и увидеть, что они добавляются.
$ 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" };
};