Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite

Lines Club

Ищем достойных соперников.




Книги по Linux (с отзывами читателей)

Библиотека сайта или "Мой Linux Documentation Project"


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


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют