Библиотека сайта rus-linux.net
Previos | Contents | Next |
Новый тип для клавиши Enter.
Рассмотрим пример - для чего может понадобится новый тип. И что нужно сделать.
Итак. Проблема...
"По умолчанию" клавиша Enter относится к типу ONE_LEVEL, то есть выдает
всегда один и тот же код (CR) при любых модификаторах.
Я же привык, что в "консольном режиме" эта же клавиша, нажатая вместе
с Control меняет свое значение на LF (во всяком случае, так во FreeBSD).
Для того, чтобы и в XKB она вела себя так же, можно описать новый тип (сделаем для этого файл my.types и не забудем "приплюсовать" его в строчку, указывающую на файлы для xkb_types).
type "CTRL_DEPEND" { modifiers = Control; map[None] = Level1; map[Control] = Level2; level_name[level1] = "Base"; level_name[level2] = "Control"; };(В общем-то, имена уровней - level_name для работы XKB не нужны, но X-сервер очень не любит "неполные" определения.)
Cоответственно, в описании xkb_symbols надо изменить определение для клавиши Enter (это скан-код <RTRN>).
Сделаем файлик my.symbols (не забудьте "приплюсовать" его куда надо) и поместим туда наше новое определение.
"Классическое" определение для <RTRN> (его можно найти найти, например, в файле symbols/us) выглядит как
key <RTRN> { [Return] };Нам надо указать, что эта клавиша имеет тип "CTRL_DEPEND", и добавить значение для появившегося второго "уровня" - Linefeed .
key <RTRN> { type="CTRL_DEPEND", [ Return, Linefeed ] };
Осталось перегрузить конфигурацию командой xkbcomp. И убедиться, что все работает.
Надо заметить, что уже запущенные приложения (например - xterm) этих
изменений не почувствуют, поскольку все описания типов используются
библиотекой Xlib и загружаются при старте приложения. Поэтому запущенные
приложения не заметят, что появился новый тип.
Но все, что запущено после пререзагрузки конфигурации, должно почувствовать
изменения.
А теперь настало время сказать, что для данной задачи, новый тип не требуется.
( Я же предупреждал, что мои примеры не являются "хорошим" или "правильным"
решением :-).
Обычно в загружаемых "конфигах" уже есть подходящий тип - "PC_BREAK". Он используется только для клавиши Break, но ничто не мешает "приписать" его и клавише Enter.
Поэтому достаточно составить только новое определение для скан-кода <RTRN>.
key <RTRN> { type="PC_BREAK", [ Return, Linefeed ] };
Иван Паскаль pascal@tsu.ru
Previos | Contents | Next |