VirtualBindings

VirtualBindings — Привязки виртуальных событий мыши и клавиатуры

Описание

Эта справочная страница описывает трансляцию клавиш в терминах "виртуальных привязок", основанную на описываемой в CDE 2.1/Motif 2.1 -- Руководство по стилю и глоссарий.

Привязки для символов клавиш osf

Символы клавиш начинающиеся с osf не являются частью раскладки клавиатуры X сервера. Вместо этого, эти символы клавиш производятся на строне клиента во время исполнения. Они интерпретируются подпрограммой XmTranslateKey и используются менеджером трансляции когда сервер передает сообщения о нажатии реальных клавиш. Это отображение основано на информации, полученной приложением во время запуска, из одного из перечисленных источников, расположенных в порядке возрастания:

Файл xmbind.alias содержит ни одной или более строк следующего формата:
"vendor_string[ vendor_release]" bindings_file
где vendor_string это имя производителя X сервера, возвращаемое X клиентом xdpyinfo и функцией Xlib XServerVendor и должно задаваться в двойных кавычках. Если исполльзуется vendor_release, то он указыват номер выпуска X сервера как он возвращается X клиентом xdpyinfo и функцией Xlib XVendorRelease и также должен распологаться внутри двойных кавычек и отделяться от vendor_string одним пробелом. Параметр vendor_release предоставляется для обеспечения возможности поддерживать изменения клавиатуры производителя, предпологая, что производитель увеличивает новер выпуска для обозначения изменений.

Параметр 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
osfAddModeShift<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несвязян
osfMenuShift<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несвязян
osfSwitchDirectionAlt<Key>Return Alt<Key>KP_Enter
osfUndo<Key>Undo
osfUp<Key>Up

Изменения в обработке клавиш с модификатором Shift

Для соостветствия с 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), если они присутствуют, для отображения кода клавиатурного события в распознаваемый символ клавиши.

Типы событий

Ниже представленны распозноваемые типы событий.

Key или KeyDown

Нажата клавиша клавиатуры.

KeyUp

Отпущена клавиша клавиатуры.

BtnDown

Нажата кнопка мыши.

BtnUp

Отпущена кнопка мыши.

Motion

Перемещен указатель мыши.

Enter

Указатель вошел в окно виджета.

Leave

Указатель покинул окно виджета.

FocusIn

Виджет получи фокус ввода.

FocusOut

Виджет потерял фокус ввода.

Связанная информация

xmbind(1)