[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