[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Работа с раскладками клавиатуры

Рассматриваемая модель иллюстрирует работу приложений с методами ввода. Она поможет вам понять принципы настройки раскладки клавиатуры.

Обработка ввода выполняется в три этапа:

  1. код клавиши / состояние клавиши (необработанное) - > символ / модификатор (новый)

    Реализация этого этапа зависит от приложения и от среды. Преобразование кодов нажатий клавиш в сочетания "символ/модификатор" для данного метода ввода выполняется приложением.

    В среде AIXwindows клиент на этом этапе работает с таблицей символов сервера xmodmap, установленной на сервере. В таблице xmodmap определяется соответствие клавиш Shift, Lock и Alt-Graphic. Клиент определяет пару "символ/модификатор", соответствующую событию Х, с помощью таблицы xmodmap и значений модификаторов Shift и Lock.

    Например, если с клавиатуры введен символ XK_a с модификатором Shift, то xmodmap преобразует его в символ XK_A. Поскольку код клавиши преобразуется в символ с модификатором Shift, приложение должно маскировать модификатор Shift для исходного события X. Следовательно, в метод ввода (этап 2) будет передан символ XK_A без модификатора.

    В других средах в случае, если из устройства не поступает дополнительная информация, в метод ввода передается символ XK_a с модификатором Shift. Метод ввода в обоих случаях выполняет одно и то же преобразование и возвращает букву А.

  2. символ/модификатор (новый) - > локализованная строка

    Реализация этого этапа зависит от локализации IMED, т.е. от конкретной локали. На этом этапе система уведомляет IMED о том, что была нажата клавиша, и запрашивает у IMED, используется ли это событие для внутренней обработки. Это происходит при вызове приложением процедуры IMFilter.

    Если IMED сообщает, что данное событие используется для внутренней обработки, то приложение игнорирует событие. Поскольку IMED анализирует событие первой, этот этап должен предшествовать интерпретации события в приложении. IMED обрабатывает только важнейшие события.

    Если же IMED сообщает, что данное событие не используется для внутренней обработки, то приложение переходит к следующему этапу.

  3. символ/модификатор (новый) - > преобразованная строка

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

    Если данное сочетание "символ/модификатор" присутствует в таблице символов метода ввода (imkeymap), то возвращается строка. В противном случае, данное событие не определено для данного метода ввода.

Таблицы символов метода ввода

Метод ввода поддерживает пользовательские таблицы символов (imkeymap), с помощью которых можно настраивать раскладку клавиатуры. Поддерживаются таблицы imkeymap для всех локалей. Имя файла imkeymap отличается от имени файла метода ввода только суффиксом: .imkeymap вместо .im.

Приведенный ниже пример применения метода ввода для итальянского языка иллюстрирует процесс настройки таблицы imkeymap:

  1. Скопируйте исходный файл таблицы символов по умолчанию в свой каталог $HOME командой:

    cd $HOME
    cp /usr/lib/nls/loc/it_IT.ISO8859-1.imkeymap.src .
    
  2. Для приведения исходного файла imkeymap в соответствие с форматом файлов по умолчанию введите:

    vi it_IT.ISO8859-1.imkeymap.src
    
  3. Откомпилируйте исходный файл imkeymap командой:

    keycomp < it_IT.ISO8859-1.imkeymap.src > it_IT.ISO8859-1.imkeymap
    
  4. Проверьте значение переменной LOCPATH: в ней значение $HOME должно предшествовать /usr/lib/nls/loc:

    LOCPATH=$HOME:$LOCPATH
    

    Примечание: Все программы setuid и setgid игнорируют значение переменной среды LOCPATH.

Инвариантное и неинвариантное преобразование

Таблицы imkeymap преобразуют символы, вводимые с клавиатуры, в строки кодового набора файла. Локализованные таблицы imkeymap, расположенные в библиотеке /usr/lib/nls/loc, задают преобразование всех кодов клавиш. Возможны два типа преобразования:

Неинвариантное преобразование Преобразование пары "символ/модификатор", порождающее строку символов кодового набора для данной локали.
Инвариантное преобразование Преобразование пары "символ/модификатор", не порождающее строку символов кодового набора для данной локали.

Специальная таблица символов /usr/lib/nls/loc/C@outbound.imkeymap определяет инвариантное преобразование для всех клавиатур данной фирмы-изготовителя и предназначена в первую очередь для работы с aixterm. Эта таблица imkeymap позволяет преобразовывать функциональные клавиши, клавиши перемещения курсора и другие специальные клавиши, часто используемые в приложениях. При разработке международных приложений, работающих со стандартным вводом и выводом, необходимо обеспечить независимость работы приложения от типа клавиатуры. Например, сочетание клавиш Alt-a для всех клавиатур данной фирмы означает одно и то же, в то время как значение сочетания клавиш Alt-тильда зависит от типа клавиатуры.

В aixterm инвариантное преобразование основано на таблице C@outbound. Для приложений, которым этой таблицы недостаточно, следует добавить необходимые определения в исходный код локализованной таблицы imkeymap.

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

Глава 16, Поддержка национальных языков .


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]