Эта справочная страница описывает трансляцию клавиш в терминах "виртуальных привязок", основанную на описываемой в CDE 2.1/Motif 2.1 -- Руководство по стилю и глоссарий.
Символы клавиш начинающиеся с osf не являются частью раскладки клавиатуры X сервера. Вместо этого, эти символы клавиш производятся на строне клиента во время исполнения. Они интерпретируются подпрограммой XmTranslateKey и используются менеджером трансляции когда сервер передает сообщения о нажатии реальных клавиш. Это отображение основано на информации, полученной приложением во время запуска, из одного из перечисленных источников, расположенных в порядке возрастания:
из ресурса XmNdefaultVirtualBindings дисплея;
из свойства корневого окна, которое может быть установлено при запуске менеджера окон mwm, с помощью специального клиента xmbind или же предыдущим запущенным Motif приложением;
из файла .motifbind в домашнем каталоге пользователя;
набора привязок, основанном на строке идентификации производителя и, дополнительно, номере выпуска X сервера. Motif производит посик таких привязок в следующем порядке:
если в домашнем каталоге пользователя содержится файл xmbind.alias, то Motif ищет в этом файле путь доступа к файлу, ассоциированный со строкой идентификации производителя или строкой идентификации производителя и номере выпуска. Если такой путь доступа к файлу найден и такой файл существует, Motif загружает привязки, содержащиеся в этом файле;
если привязок найдено не было, Motif ищет файл xmbind.alias в каталоге, указанном в переменной среды окружения XMBINDDIR, если если XMBINDDIR определена, а если не определена, то в каталоге /usr/lib/Xm/bindings. Если такой файл существует, то Motif ищет в этом файле путь доступа к файлу, ассоциированный со строкой идентификации производителя или строкой идентификации производителя и номере выпуска. Если такой путь доступа к файлу найден и таклой файл существует, Motif загружает привязки, содержащиеся в этом файле;
если привязок найдено не было, Motif загружает набор жестко заданных привязок отката.
Файл xmbind.alias содержит ни одной или более строк следующего формата:
"vendor_string[ vendor_release]" bindings_file |
Параметр bindings_file является путем доступа к файлу, содержащему собственно привязки. Может быть задан как относительный так и абсолютный путь. Если задан относительный путь, от отсчитывается от каталога, содердащего файл xmbind.alias.
Строки комментария в файле xmbind.alias должны начинаться с символа ! (восклицательный знак).
Привязки, найденные как в файле .motifbind так и с помощью отображения приозводителя, размещаются в свойстве корневого окна. Это свойство используется для определения привязок для последующих Motif приложений.
При запуске менеджер окон mwm пытается загрузить файл .motifbind из домашнего каталога пользователя. Если не смогла быть выполнена загрузка этого файла, он загружает привязки производителя как было описано выше. Он распологает загруженные привязки в свойстве корневого окна для использвания последующими Motif приложениями.
Формат спецификацй отображения символов клавиш osf на реальные символы клавиш похож на формат спецификаций для трансляции событий. Синтаксис описывается в нотации EBNF с использованием следующих соглашений:
[a] Обозначает либо ничего либо a {a} Обозначает нуль или более вхождений a (a|b) Обозначает либо a либо b |
Терминальные элементы заключаются в двойные кавычки.
Для спецификаций привязок символов клавиш osf используется следующий синтаксис:
binding_spec = {line "\n"} [line] line = virtual_keysym ":" list_of_key_event list_of_key_event = key_event { "," key_event } key_event = {modifier_name} "<Key>" actual_keysym virtual_keysym = keysym actual_keysym = keysym keysym = Допустимый символ клавишы X11 который может быть отображен с использованием XStringToKeysym |
Как и в случае трансляции событий более специфичные описания событий должны идти перед менее специфичными описаниями. Например, описания событий клавиш с модификаторами должны предшествовать описанию тех же клавиш, но без этих модификаторов.
Ниже приведен пример спецификации для ресурса XmNdefaultVirtualBindings в файле ресурсов:
*defaultVirtualBindings: \ osfBackspace : <Key>BackSpace \n\ osfInsert : <Key>InsertChar \n\ osfDelete : <Key>DeleteChar \n\ ... osfLeft : <Key>left, Ctrl<Key>H |
Файлы .motifbind и файлы привязок специфичных для производителя имеют схожий формат, за исключением того, что спецификация привязки для каждого символа клавиши записывается в отдельной строке. Предыдущий пример спецификации привязок в файле .motifbind или в файле привязок специфичных для производителя будут иметь следующий вид:
osfBackspace : <Key>BackSpace osfInsert : <Key>InsertChar osfDelete : <Key>DeleteChar ... osfLeft : <Key>left, Ctrl<Key>H |
В следующей таблице приведены фиксированные привязки отката по умолчанию для символов клавиш osf.
Таблица 3-1. Привязки отката по умолчанию для символов клавиш osf
Символ клавиши osf | Привязки отката по умолчанию |
---|---|
osfActivate | <Key>KP_Enter <Key>Execute |
osfAddMode | Shift<Key>F8 |
osfBackSpace | <Key>BackSpace |
osfBeginLine | <Key>Home <Key>Begin |
osfCancel | <Key>Escape <Key>Cancel |
osfClear | <Key>Clear |
osfCopy | несвязян |
osfCut | несвязян |
osfDelete | <Key>Delete |
osfDeselectAll | несвязян |
osfDown | <Key>Down |
osfEndLine | <Key>End |
osfHelp | <Key>F1 <Key>Help |
osfInsert | <Key>Insert |
osfLeft | <Key>Left |
osfLeftLine | несвязян |
osfMenu | Shift<Key>F10 <Key>Menu |
osfMenuBar | <Key>F10 Shift<Key>Menu |
osfNextMinor | несвязян |
osfPageDown | <Key>Next |
osfPageLeft | несвязян |
osfPageRight | несвязян |
osfPageUp | <Key>Prior |
osfPaste | несвязян |
osfPrimaryPaste | несвязян |
osfPriorMinor | несвязян |
osfReselect | несвязян |
osfRestore | несвязян |
osfRight | <Key>Right |
osfRightLine | несвязян |
osfSelect | <Key>Select |
osfSelectAll | несвязян |
osfSwitchDirection | Alt<Key>Return Alt<Key>KP_Enter |
osfUndo | <Key>Undo |
osfUp | <Key>Up |
Для соостветствия с MIT X11R5 Patch 24, эта версия Motif представляет изменения в обработке клавиш с модификатором Shift. Это изменение позволяет использовать дополнительную цифровую клавиатуру для генерации цифр с использованием стандартного механизма X. Поскольку поведение по умолчанию соответствует привязкам клавиш xmodmap, трансляции и привязки вируальных клавиш, которые используют модификатор Shift могут вести себя по разному. Наиболее общим симптомом такого поведения является то, что немодифицированные с Shift дополнительные и функциональные клавиши (возможно с другими модификаторами) производят ожидаемый результат, а модифицированные Shift -- нет.
Для восстановления старого поведения можно удалить модифицированные интерпретации клавиш, вызывающих проблеммы, используя утилиту xmodmap. Каждый элемент таблицы раскладки клавиатуры для xmodmap содержит до четырех привязок символов клавиш. Второй и четвертый символ клавиши используется для модифицированных Shift клавиш. Если выражение содержит только два символа клавиш, просто удалите второй символ клавиши. Если же элемент имеет три и более символов клавиш, замените второй символ на NoSymbol и удалите четвертый символ клавиши.
В версии X11R6 и старше для обработки ввода с клавиатуры вместо раскладок клавиатуры xmodmap обычно используется специальное расширение протокола системы -- X Keyboard Extension, сокращенно обозначаемое Xkb. Никакой информации по этому поводу в оригинале не содержится. |
Синтаксис таблиц трансляций, используемый Motif полностью определяется в книге X Toolkit Intrinsics -- Интерфейс на языке C. Для получения полного описания синтаксиса и общих инструкция по написанию и модификации таблиц трансляций обращайтесь к этой книге. Тем не менее, далее приводится краткое обобщение формата таблиц трансляции.
Синтакс таблицы транстляции определяется с использование подхода, аналогичного использованному ранее для таблиц привязок. Информационное описание заключается в угловые скобки (<>).
TranslationTable = [directive] {production} directive = ("#replace" | "#override" | "#augment") "\n" production = lhs ":" rhs "\n" lhs = (event | keyseq) {"," (event | keyseq)} keyseq = """ keychar {keychar} """ keychar = ("^" | "$" | "\\") <ISO Latin 1 character> event = [modifier_list] "<" event_type ">" [count] {detail} modifier_list = (["!"][":"] {modifier} | "None") modifier = ["~"] ("@" <keysym> | <name form table below>) count = "(" <positive integer> ["+"] ")" rhs = {action_name "(" [params] ")"} params = string {"," string} |
Поле string не обязательно заключать в двойные кавычки если оно не содержит пробелов или символов табуляции, а также запятых, признаков новой строки и скобок. Полный список значений строк созданные на основе поля params передается указанной процедуре действия.
Поле details может использоваться для указания символа клавиши который указывает конкретное клавиатурное событие. Например, Key является именем типа события, но он может быть модифицирован с помощью поля detail до имени конкретного события, такого как KeyA.
Список модификаторов, который может быть пустым, состоит из клавиш модификаторв, которые должны быть нажаты вместе с последовательностью клавиш. Клавиши модификаторов могут бать сокращены до одной буквы следующим образом:
s Shift c или ^ Ctrl (Control> m или $ Meta a Alt |
Также доступны и другие модификаторы, например, такие как "Mod5" или "Button2", но они не имеют сокращений (хотя модификаторы "Button" могут быть сокращены в комбинации с событиями, как будет показано далее). Если список модификаторов пуст и не определен как "None", то это означает, что клавиша нечувствительна к модификаторам. Перечисленные модификаторы должны находиться в указанных состояниях, а к неперечисленным модификаторам клавиша нечувствительна. Однако, если список начинается с восклицательного знака (!), то неперечисленные модификаторы не могут быть установлены. Дополнительно, если имя модификатора предваряется тильдой (~), то соответствующий модификатор не должен быть нажат.
Если список модификаторов начинается с двоеточия (:), X пытается использовать стандвртные модификаторы (Shift и Lock), если они присутствуют, для отображения кода клавиатурного события в распознаваемый символ клавиши.
Ниже представленны распозноваемые типы событий.
Нажата клавиша клавиатуры.
Отпущена клавиша клавиатуры.
Нажата кнопка мыши.
Отпущена кнопка мыши.
Перемещен указатель мыши.
Указатель вошел в окно виджета.
Указатель покинул окно виджета.
Виджет получи фокус ввода.
Виджет потерял фокус ввода.
Пред. | Начало | След. |
Трансляции | Уровень выше | Типы данных Xm |