[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: question to xmodmap wizards
> огромное спасибо! можно сказать, работает! я приаттачил файлик
> ~/.xmodmap, если он кому-то будет интересен. он для русской
> "виндовской" клавиатуры, на которой есть 2 кнопки с "окошком" и одна
> кнопка "меню".
....
> вот только вопрос: почему-то при нажатии на caps lock зажигается обе
> лампочки: и capslockm и scrolllock.
Насколько я понимаю - в данном случае scrollock просто индицирует
что клавиша "с ModeLock".
Кстати, у меня этот же LED зажигался и при нажатии Mode_switch.
И когда я из любопытства подвесил этот ModeLock на Space -
- LED scrollock зажигался
- а space стала "залипать"
:-)
> кроме того, по "xev" видно, что
> capslock генерирует то Shift_Lock, то XF86ModeLock, и состояние
> клавиши capslock влияет на то, что генерирует клавиша "меню": это либо
> Mode_switch, либо XF86ModeLock (когда capslock "активна").
Ну этого и следовало ожидать :-)
XF86ModeLock - обычный символ (ну или "псевдо-символ") и раз уж он стоит
во второй колонке первой группы, то и будет выбираться, когда состояние
Shift указывает на вторую колонку.
А все работает потому, что -
- для приложения не важно - какой keysym был на нажатой клавише, оно
смотрит на биты модификаторы, которые передаются в отдельном поле 'события'
от сервера
- а вот X-сервер привязывает эти модификаторы не к конкретному keysym,
а ко всей клавише. То есть модификатор "взводится" в любом случае, если
нажата клавиша у которой хотя бы в одной из колонок есть соответствующий
(этому модификатору) keysym.
Может быть это и "кривизна дизайна", но в данном случае она "на руку".
Если появление XF86ModeLock всеже где-то мешает, то надо просто "отодвинуть
его подальше" -
keycode ** = Shift_Lock Shift_Lock Shift_Lock Shift_Lock XF86ModeLock
Напомню, что core protocol допускает в описании клавиши до 255 keysym
на каждый keycode. Только стандартные процедурки типа XLookupString
не заглядывают дальше четвертой колонки.
Поэтому в таком случае xev будет показывать Shift_Lock при любых
комбинациях Shift и Mode_switch.
Честно говоря - я это не проверил :-)
Но по моим соображениям - должно работать.
--
Ivan U. Pascal | e-mail: pascal@tsu.ru
Administrator of | Tomsk State University
University Network | Tomsk, Russia