ENGLISH | KOI | WIN | ALT | ISO
Мои программы

Общее строение файлов конфигурации XKB.

Возможны три типа файлов конфигурации

"Простая" конфигурация

Если в файле находится "простая" конфигурация, то в начале файла должен быть заголовок

  [ Флаги ] ТипФайла [ Имя ]  
после которого сразу следуют объявления (или инструкции). Например,
xkb_keyсodes      <TLDE> = 49;    <AE01> = 10;  .......  

Последовательность из "простых" блоков.

Однако, чаще используется другой формат файла - последовательность "простых" блоков. В таком файле объявления группируются в блоки, которые ограничиваются фигурными скобками - '{...}' (после каждого блока должна быть "точка с запятой" - ';').

Перед каждым блоком должен быть заголовок, такой же как и в файле с "простой" конфигурацией

 [ Флаги ] ТипФайла   [ Имя1 ] '{' [ Объявления ] '};'   [ Флаги ] ТипФайла   [ Имя2 ] '{' [ Объявления ] '};'  ...  
Например,
xkb_symbols "basic" {....};  xkb_symbols "us" {....};  ....  

Типы файлов.

И в том и в другом формате используются одинаковые "Типы Файлов". Это может быть одно из пяти слов

  • xkb_keycodes - файл (или блок), в котором числовым значения скан-кодов даются символические имена
  • xkb_types - файл, в котором описываются возможные типы клавиш (тип определяет - сколько различных значений может иметь одна и та же клавиша в зависимости от состояния модификаторов)
  • xkb_compat - файл, в котором описывается "поведение" модификаторов
  • xkb_symbols - основной файл, в котором каждому скан-коду (заданному символическим именем) назначаются все возможные значения, которые может выдавать конкретная клавиша (другими словами - "раскладка клавиатуры").
  • xkb_geometry - описание расположения кнопок и индикаторов на клавиатуре

Надо отметить, что, если файл состоит из нескольких блоков, то все блоки должны быть одного типа. Отличаются они только именем.

Имя представляет собой произвольное слово в двойных кавычках.

Как можно заметить, в формате заголовка только "ТипФайла" должен присутствовать обязательно, а "Имя" может отсутствовать. Естественно, если файл предствляет собой "простую" конфигурацию или содержит только один блок, то именовать их необязательно. В этом случае, чтобы сослаться в настройках X-сервера на такую конфигурацию достаточно указать имя файла.

Но, если в файле находится несколько блоков, разумеется они должны иметь имена, причем разные. При этом, чтобы сослаться на конкретную конфигурацию, ее указывают в виде

 имя_файла(имя_блока)  
например,
 us(pc104)  

Флаги.

В каждом заголовке может быть несколько флагов

  • default - этот флаг имеет смысл, если файл состоит из нескольких блоков. Он помечает один из блоков (только один !) как блок "по умолчанию". То есть, если где-то будет указано, что конфигурацию надо брать из такого файла, но при этом не сказано - из какого блока, то будет взят именно тот из блоков, который помечен флагом "default".
  • partial - означает, что в этом блоке дано не полное описание соответствующего типа, а только его часть. Например, это может быть блок типа xkb_symbols, в котором описаны только "функциональные" клавиши, или блок типа xkb_geometry, в котором описано только расположение индикаторов.
  • hidden - означает, что определения из этого блока в "нормальном" состоянии клавиатуры (когда не активен ни один из модификаторов) не видны, и проявляются только при нажатии какого-нибудь модификатора. Например, блок типа xkb_symbols в котором описаны коды которые выдает "дополнительная цифровая клавиатура" (keypad) при нажатом Num_Lock.

Следующие флаги имеют смысл только для файлов (и блоков) типа xkb_symbols и просто отмечают - какие группы клавиш описаны в этом блоке

  • alphanumeric_keys - "алфавитно-цифровые"
  • modifier_keys - модификаторы (Control, Alt, Meta и т.п.)
  • keypad_keys - клавиши "дополнительной цифровой" клавиатуры
  • function_keys - "функциональные" клавиши
  • alternate_group - "альтернативная" группа, то есть символы какого-нибудь национального алфавита.

Надо заметить, что для самого X-сервера (точнее, для программы xkbcomp) имеет значение только флаг "default", поскольку от него может зависеть выбор нужного блока. Остальные флаги нужны скорее юзеру, чтобы лучше ориентироваться в куче различных блоков и файлов.

Кстати, сводный список всех блоков конфигураций с их флагами можно найти в файлах *.dir в директории {XROOT}/lib/X11/xkb. Названия файлов аналогичны названиям типов конфигурации - keycodes, types, symbols и т.д. Флаги там обозначаются одной буквой - первой буквой из названия соответствующего флага.

Последовательность из "составных" блоков.

Наконец, рассмотрим третий тип конфигурационного файла - последовательность из "составных" блоков. Каждый такой "Составной Блок" оформляется как "простой" блок

 [ Флаги ] СложныйТип [ Имя ] '{' Блок { Блок } '}' ';'  
но внутри содержит не просто объявления, а блоки "простых" типов, например
xkb_keymap "complete" {  	xkb_keycodes  {...};  	xkb_types     {...};  	xkb_compat    {...};  	xkb_symbols   {...};  	xkb_geometry  {...};  };  

Так же, как и файл с "простыми" блоками, файл с "составными" блоками может содержать несколько таких "составных" блоков, отличающихся именами (один из блоков может быть помечен флагом "default").

Существует три типа "составных" блоков

  • xkb_semantics - такой блок должен содержать блок xkb_compat и может также иметь в себе блок xkb_types;
  • xkb_layout - должен содержать блоки xkb_keycodes, xkb_types, xkb_symbols и может, также, иметь в себе блок xkb_geometry;
  • xkb_keymap - наиболее полный блок, должен включать в себя все, что должны содержать предыдущие два типа (то есть - xkb_keycodes, xkb_types, xkb_compat xkb_symbols) и может включать дополнительно те компоненты, которые могут иметь в себе два предыдущих типа.