[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: question to xmodmap wizards



> Hi,
> 
> В связи с этим вопрос: можно ли при использовании xmodmap сделать так,
> чтобы клавиша caps lock работала по назначению (т.е. лочила заглавные
> буквы, как латиницу, так и кириллицу, и одно нажатие делало бы
> переключение), а клавиша переключения языка работала самам по себе
> (тоже лочила либо латиницу, либо кириллицу, и одно нажатие делало бы
> переключение)?

  Можно.
  Caps_Lock надо оставить просто CapsLock'ом
keycode ** = Caps_Lock
add lock = Caps_Lock

а Mode_switch (переключалка рус/лат) повесить на другую клавишу
keycode ** = Mode_switch
add mod3 = Mode_switch
(mod* можно взять и другой незанятый Num_Lock, Alt и т.п.)

  Единственная проблема - как сделать их обе "залипающими".
Нигде в документации я не нашел, но подсмотрел в xmodmap от ache, что
если добавить к описанию клавиши KeySym XF86ModeLock то ... работает.
(Не знаю - для чего она нужна, только ли для этого или есть еще "побочный
эффект", но - работает).
  Итак
keycode ** = Caps_Lock   XF86ModeLock
keycode ** = Mode_switch XF86ModeLock

  При этом все "лочится" и переключается.
Однако на русских буквах не работает Caps_Lock (только Shift) и не работает
Control.

  Дело в том, что Shift просто выбирает колонку из xmodmap, а Caps_Lock 
в "иксах" никакого отношения к колонкам не имеет и обрабатывется отдельно
в Xlib. Ну и эта обработка ("капитализация" буквы) нормально сделана только
для ascii, и не работает с кодами >127.

  Эту проблему можно решить, если заменить в описании Caps_Lock на Shift_Lock
(есть такая keysym, но ее почему-то никто не использует).
  Тогда клавиша Caps_Lock (на которую назначаена на самом деле Shift_Lock :-)
нормально перебирает колонки как для ascii, так и для второй группы.

  Остается только проблема с Control, но она решается только правкой
исходников (ну или настройкой XKB :-).
  И еще - в "иксах" Shift не отменяет действие Caps_Lock (ну и Shift_Lock -
тоже). С этим даже в XKB плохо.
  Теоретически сделать можно (с XKB), но -
- надо исправить один баг в Xlib (он исправлен но очень недавно)
- задать пару "хитрых" переменных среды
- подправить файлы настройки XKB (types)

> Также в чисто образовательных целях вопрос: достижим ли такой же
> эффект при использовании XKB (опять же без внешних переключалок)?

  Запросто.
  Даже практически без исправлений в файлах настройки. Надо только
выбрать подходящую конфигурацию.

-- 
 Ivan U. Pascal         |   e-mail: pascal@tsu.ru
   Administrator of     |   Tomsk State University
     University Network |       Tomsk, Russia