Программирование в X Window средствами Free Pascal
Шрифт:
Для разных алфавитов X поддерживает разные множества логических кодов. Возможные типы алфавитов перечисляются в файле /usr/include/X11/keysym.h.
Одному коду клавиши может соответствовать несколько символов в зависимости от состояния клавиш-модификаторов. Функция
позволяет по коду nKeyCode получить соответствующий ему символ с номером nIndex. Если nIndex равен 0, то полученный символ соответствует просто нажатой клавише. Если nIndex равен 1, то возвращается символ, соответствующий
Функция XKeysymToKeycode осуществляет обратное преобразование.
Программа может получить карту соответствия кодов и символов, обратившись к процедуре XGetKeyboardMapping.
Изменяется соответствие физических и логических кодов процедурой XChangeKeyboardMapping. Следующая последовательность операторов ставит клавише ‹F2› в соответствие символ XK_F3.
…
…
…
Здесь использована процедура XStringToKeysym, которая по строке "str" возвращает соответствующий символ XK_str.
Когда соответствие кодов меняется, всем работающим в настоящее время клиентам посылается событие MappingNotify.
Клавиши-модификаторы также имеют логические коды. Клавишам Shift сопоставлены символы XK_Shift_L и XK_Shift_R; Caps Lock соответствует XK_CapsLock; Control - XK_Control_L; Mod1 - XK_Meta_L и XK_Meta_R. Символы остальных модификаторов (Mod2 - Mod5) не определены. X содержит набор специальных процедур, которые позволяют получить и установить соответствие код-символ для модификаторов. Эти функции следующие: XGetModifierMapping, XInsertModifiermapEntry, XDeleteModifiermapEntry, XSetModifierMapping.
X не останавливается на задании соответствия код клавиши - символы, а идет дальше. Система позволяет программе сопоставить любой комбинации модификаторов и клавиш (например, ‹Shift+Ctrl+A›) ASCII строку (например, "EXIT"). Для некоторых клавиш соответствующие строки задаются сервером по умолчанию. Так, символу XK_A соответствует строка "A".
Макрос XRebindKeysym берет символ, список модификаторов и сопоставляет им строку.
Процедура XLookupString, наоборот, берет событие о нажатии (отпускании) клавиши и возвращает соответствующие ему символ и строку. Последний ее параметр - указатель на структуру типа XComposeStatus. Дело в том, что некоторые клавиатуры имеют специальную клавишу Compose, которая позволяет печатать символы, которым нет соответствия среди клавиш. Специальная таблица указывает, какой символ должен быть создан, если обычная клавиша нажимается одновременно с Compose. Ссылка на эту информацию и возвращается в структуре XComposeStatus.
Ниже приводится фрагмент программы, которая распознает функциональные клавиши ‹F1›-‹F5›, и при их нажатии печатает соответствующую строку. Программа также сопоставляет комбинации ‹Shift+Control+A› строку "EXIT". Эта комбинация используется для завершения программы.
…
…
…
Лекарь Империи 9
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
рейтинг книги
Газлайтер. Том 5
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Сапер
1. Сапер
Фантастика:
героическая фантастика
попаданцы
альтернативная история
рейтинг книги
Я еще не князь. Книга XIV
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Кодекс Охотника. Книга VII
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Я снова не князь! Книга XVII
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Точка Бифуркации XI
11. ТБ
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Воронцов. Перезагрузка. Книга 2
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
рейтинг книги
Спасите меня, Кацураги-сан! Том 4
4. Токийский лекарь
Фантастика:
городское фэнтези
попаданцы
дорама
фэнтези
рейтинг книги
Газлайтер. Том 26
26. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Я уже царь. Книга XXIX
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Идеальный мир для Лекаря 13
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
рейтинг книги
Огненный наследник
10. Десять Принцев Российской Империи
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги