Описание поведения индикатора
В файлах типа xkb_compat также описывается "поведение индикаторов", хотя к "таблице совместимости" (compability) они отношения не имеют.
Напомню, что в XKB можно определить до 32 индикаторов. Первые 3-4 (в зависимости от типа клавиатуры) отображаются реальными "лампочками" на клавиатуре, а остальные считаются "виртуальными" и могут отображаться специальными программами.
В файле типа xkb_keycodes индикаторам даются символические имена (связыватся номера индикаторов и "имя индикатора").
А в файле xkb_compat описывается - как эти индикаторы ведут себя в зависимости от "состояния клавиатуры". Напомню, что...
Во-первых, индикаторы могут отображать состояние
- модификаторов,
- номера группы,
- управляющих флагов.
Причем, поскольку первые два из перечисленных "компонентов состояния XKB" "размазаны" по трем переменным (base, locked, latched), поведение индикаторы можно связать с любой из указанных переменных или с их "эффективным" (суммарным) значением.
Надо отметить, что один и тот же индикатор может одновременно "отслеживать" изменения и "своего" модификатора, и какого-нибудь номера группы, и управляющего флага (хотя, зачем это нужно?).
Во-вторых, индикатор может не только "отслеживать" состяние XKB, но и включаться/выключаться прикладными программами. При этом, в описании индикатора можно разрешить/запретить такое включение/выключение или установить "обратную связь" (то есть, при включении/выключении индикатора будут происходить соответствующие изменения в состоянии XKB).
Итак. Описание поведения индикатора имеет вид
'indicator' имя_индикатора '{' описание '};'
Здесь "имя_индикатора" - это то символическое имя (строка символов в двойных кавычках), которое было дано ему в файле xkb_keycodes.
А "описание" обычно имеет вид оператора присваивания (исключение - логические переменные-флаги, которые могут принимать значения только True/False).
В этих "описаниях" могут встретиться строчки типа
- modifiers = ...; или mods = ...;
- groups = ...;
- controls = ...; или ctrls = ...;
- whichModState = ...; или whichModifierState = ...;
- whichGroupState = ...;
- allowExplicit = ...;
- drivesKeyboard = ...; (имеет кучу "синонимов", см. ниже)
- index = ...;