   Индикатор и переключатель клавиатуры Xrus (Версия 1.13.0)
   =========================================================

   Описание программы
   ~~~~~~~~~~~~~~~~~~
   Основное   назначение   данной  программы   -   переключение
регистров  клавиатуры   РУС/ЛАТ,  хотя  в  принципе   ее  можно
использовать для переключения других алфавитов, для зтого нужны
только  шрифты и  раскладка  клавиатуры.  Программа написана  с
использованием библиотек  Motif/Xaw.
   Механизм действия  программы прост -  она ловит  все нажатия
клавиш  и при  нажатии  определенной  комбинации клавиш  меняет
местами 1,2 и 3,4 колонки раскладки клавиатуры (modmap). Если в
раскладке  клавиатуры   больше  4  колонок,   местами  меняются
половинки.
   В  данной  версии  программы   переключение  происходит  при
одновременном  нажатии левого  и правого  Shift (по  умолчанию;
можно задать любую другую комбинацию)  или при нажатии мышью на
кнопку индикатора.  Можно также  указать комбинации  клавиш для
нетриггерного переключения клавиатуры.
   Для обеспечения  запирания экрана программа  принимает также
события мыши. По  истечении заданного времени без  событий мыши
и   клавиатуры   (timeout)   запускается   заданная   программа
блокирования экрана (locker).

   Запуск программы
   ~~~~~~~~~~~~~~~~
   Для  запуска программы  необходимо предварительно  загрузить
раскладку русской  клавиатуры с  помощью программы  xmodmap или
указать  имя  файла  с  раскладкой в  командной  строке  или  в
ресурсах. Раскладка может быть любой,  в частности - ЙЦУКЕН или
ЯВЕРТЫ.   Следующие  действия   обычно   выполняются  в   файле
.Xclients:

   xrusmodmap /usr/share/xruskb/jcuken-cyr.xmm
   xrus

   или

   xrus jcuken-cyr

   или просто xrus, если в ресурсах указана строка
   Xrus*xmodmap: jcuken-cyr

   Xrus  ищет раскладку  сначала в  текущем  каталоге, затем  в
$prefix/share/xruskb, затем с добавлением  окончания .xmm в том
же каталоге. Поэтому можно указывать только название раскладки,
если  она   установлена  в   нужный  каталог,   например  `xrus
jcuken-cyr'.  Если  у  вас  нет  локализации  и  jcuken-cyr  не
работает,  попробуйте   jcuken-koi8  или  раскладку   с  другой
кодировкой.

   Файлы  раскладок  для  Xrus  отличаются  от  соответствующих
раскладок  широко распространенных  в  сети только  отсутствием
изменения модификаторов.  В оригинальных  раскладках (by  Serge
Vakulenko)   CapsLock  добавлялся   к   Mod2  для   обеспечения
переключения по CapsLock; в Xrus это  не нужно. Если у Вас есть
какая-нибудь  русская раскладка,  которую  Вы использовали  без
Xrus, то  можно либо продолжать  использовать ее,  либо удалить
изменение  модификаторов.   В  первом  случае   CapsLock  будет
продолжать переключать режим (но Xrus не будет это отображать).
   Рекомендуется  поместить  в  каталог  .../app-defaults  файл
Xrus, в  котором записаны ресурсы  данной программы  (взятые из
Xrus.ad). Xrus  не требует  этого, но  если вы  хотите изменить
какие либо ресурсы, удобно иметь под рукой шаблон с умолчаниями
и  комментариями.  Если  у  Вас  был  старый  Xrus.ad,  то  его
обязательно нужно либо удалить, либо заменить на новый.

   Собственные ресурсы программы
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Name           Type        Default     Corresponding option
   -------------- ----------- ----------- --------------------
   *autolock      boolean     false       -autolock
   *locker        string      xlock       -locker <command>
   *timeout       int         30          -timeout <value>
   *useBell       boolean     false       -bell,+bell
   *xmodmap       string      ""          <filename>
   *switchKeys    string      Shift_L+Shift_R   none
   *toLatKeys     string      ""          none
   *toRusKeys     string      ""          none
   *switchForOneKeys string   ""          none
   *led           int         0           -led <num>
   *altMaps       string      ""          none
   *icon          boolean     true        -icon,+icon
   *adjustModeButtons boolean true        none
   *alwaysOnTop   boolean     false       none
   *alwaysMapped  boolean     true        none
   *capsLockEmu   boolean     false       none
   *capsLockLed   int         0           none
   *recheckTime   int         1500        none
   *noFork        boolean     false       -nofork
   *wMaker        boolean     false       -wmaker
   *wmIcon        boolean     false       -wmicon
   *xmodmapProgram string     BINDIR/xrusmodmap
   *title0        string      xrus:LAT    none
   *title1        string      xrus:RUS    none
   *perWindow     boolean     false       -perwindow
   *titlePerWindow0 string    (LAT)       none
   *titlePerWindow1 string    (RUS)       none
   *occupyAllDesks boolean    true        none
   *keyLog        string      ""          -keylog

   timeout измеряется в минутах.
   Опция  -bell   включает  писк  при  переключении,   +bell  -
выключает.
   switchKeys, toLatkeys  и toRusKeys задают  комбинации клавиш
для   переключения  режима   клавиатуры.   Они  имеют   формат:
<Key>+<Key>+...,  где Key  -  стандартное  название клавиши  из
файла keysymdef.h без приставки XK_.
   *switchForOneKeys задает комбинацию  клавиш для переключения
режима  для одной  следующей клавиши.  Формат такой  же, как  у
switchKeys.
   -led задает  номер клавиатуного  индикатора для  отображения
русского  режима  клавиатуры.  0   означает  отсутствие  такого
отображения.
   *altMaps задает список файлов  с альтернативными раскладками
клавиатуры. Для  загрузки этих  раскладок запускается  xmodmap.
Чтобы  задать названия  раскладок, появляющиеся  в меню,  нужно
задать ресурсы  *altmapX.labelString, где X -  порядковый номер
начиная с нуля. (altmapX -  объект типа XmPushButton). В случае
компиляции  с Xaw  нужно  указывать  вместо labelString  просто
label.
   *icon  и  опции   -+icon  определяют,  будет  ли   иконка  с
индикатором отображаться  на экране. Если Вы  компилировали без
Motif'a, то иконки не будет всегда.
   Если  *adjustModeButtons  равен  True, то  размер  иконки  в
состояниях  РУС/ЛАТ  уравнивается.   Используются  максимальные
размеры двух состояний.
   Если *alwaysOnTop равен True, то  иконка будет 'плавать' над
прочими окнами.
   Если  *alwaysMapped   равен  True,  то  Xrus   будет  всегда
восстанавливать иконку на экране, когда VWM пытается ее убрать.
(похоже, это не работает с fvwm, но работает с mwm/dtwm)
   При  '*capsLockEmu: true'  Xrus  эмулирует действие  клавиши
CapsLock, таким образом позволяя вводить большие русские буквы.
CapsLock при этом удаляется из модификаторов.
   *capsLockLed устанавливает номер  индикатора для CapsLock'a.
Используется только при '*capsLockEmu: true'.
   *recheckTime задает  интервал времени в  миллисекундах после
показа  окна на  экране до  проверки  запроса событий  основным
приложением. Эта  опция полезна, когда  какие-нибудь приложения
сначала  заказывают события,  а  потом  от них  отказываются  и
рассчитывают на свойство передачи  событий в родительское окно.
Это довольно редкая ситуация, и  X'ы не предусматривают события
по изменению маски событий.
   *noFork запрещает уход в background при запуске.
   *wMaker (и опция -wmaker)  включают отображение индикатора в
иконке приложения (appicon), специфичной для оконного менеджера
Window Maker.
   *wmIcon  включают  отображение  индикатора  в  иконке  окна,
которая есть  во всех оконных менеджерах.  В этом случае  вы не
сможете переключать  режим мышкой  или вызывать  меню, так  как
оконные менеджеры перехватывают нажатия мышкой на свои иконки.
   *xmodmapProgram задает программу для загрузки раскладок.
   *title0 и *title1  задают название иконки диспетчера  окон в
основном и альтернативном режиме соответственно.
   *perWindow  включает режим  сохранения состояния  клавиатуры
для каждого  окна верхнего уровня  и смену состояния  при смене
фокуса (текущего окна).
   *titlePerWindow0   и    *titlePerWindow1   задают    строки,
добавляемые к заголовку каждого окна в режиме per-window.
   *occupyAllDesks    делает   иконку    "липкой",   то    есть
присутствующей на  всех виртуальных экранах. Работает  только с
некоторыми оконными диспетчерами.
   -keylog  задает имя  файла,  куда  записываются все  нажатые
клавиши.

   Кроме   собственных   ресурсов    имеется   ряд   параметров
стандартных объектов  библиотеки Motif или  Xaw. В  частности с
помощью  этих ресурсов  можно  изменить  индикацию режимов  или
вставить  вместо  текстовой  строки  картинку  (только  Motif).
Смотрите  Xrus.ad   для  описания  некоторых   параметров,  все
параметры документированы в описании библиотек Motif или Xaw.

   Динамическое изменение параметров и т.д.
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   При нажатии на кнопку переключения алфавита правой (третьей)
клавишей мыши  появляется меню из которого  можно заблокиробать
экран, войти в  режим настроек или завершить  программу Xrus. В
окне настроек можно изменить  параметры выполнения Xrus'а и/или
сохранить их в файл "~/.xrus".

   Виртуальные window manager'ы (vwm)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   При работе с vwm удобно приклеить кнопку-индикатор к экрану,
чтобы  она не  исчезала из  вида  при переключении  виртуальных
desktop'ов.  Это можно  сделать либо  вручную  - выбрать  опцию
Stick из  меню vwm, либо  автоматически, настроив  ресурсы vwm.
Для fvwm нужно  указать что-нибудь вроде "Sticky  Xrus" в файле
system.fvwmrc или .fvwmrc;  для olvwm - в  ресурс VirtualSticky
добавить   строчку  Xrus.
   Тем не  менее, Xrus  имеет возможность  игнорировать попытки
vwm  убрать  иконку  с   экрана.  Эта  возможновть  управляется
ресурсом *alwaysMapped  (boolean), по  умолчанию она  включена.
Похоже,   что   это    не   работает   с   fvwm    (иконка   не
восстанавливается,  никаких других  побочных эффектов),  однако
прекрасно работает с dtwm(CDE).  Вероятно, fvwm не обрабатывает
MapRequestEvent.

   Проблемы с xlock
   ~~~~~~~~~~~~~~~~
   Если  в русском  режиме клавиатуры  запустить  xlock (не  из
xrus,  а, скажем,  из xterm),  то возникают  проблемы с  вводом
пароля (если только у Вас пароль не состоит из русских букв ;).
Для  избежания  подобных  трудностей   можно  использовать  три
приема:
   1.  Всегда  запускать xlock  из  xrus.  В этом  случае  xrus
автоматически переключается на латинский режим.
   2.  Предусмотреть   какую-нибудь  клавишу   в  xmodmap   для
модификатора Mod2, и если Вы все таки запистили xlock в русском
режиме клавиатуры,  то набирайте пароль удерживая  эту клавишу.
Новые X  сервера требуют  наличия Mode_switch  в раскладке  для
работы этого метода.
   3.  Переименовать xlock,  а вместо  xlock поставить  скрипт,
который  будет   загружать  латинскую  раскладку   и  запускать
оригинальный xlock.

   Проблемы с некоторыми другими программами
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   xv - читает раскладку клавиатуры только один раз при старте,
поэтому  не переключается,  и если  запустить в  режиме РУС  то
постоянно пищит.
   scoterm  - пытается  эмулировать  сканкоды,  что у  него  не
получается  для русских  букв. Это  можно отключить  следующими
ресурсами:

   scoterm*keyboard:       usa
   scoterm*charset:        iso8859
   scoterm*scancodesOn:    false

   Некоторые  программы  могут сильно  полагаться  на  передачу
событий  в  родительское  окно,  что  нельзя  во  всех  случаях
обеспечить при работе Xrus. Если  в какой-нибудь программе мышь
или  клавиатура  работают  странно   или  не  работают  вообще,
попробуйте   увеличить  параметр   *recheckTime,  но   значение
по-умолчанию должно удовлетворить известные мне случаи.

   Откуда можно скачать последнюю версию
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ftp://ftp.yars.free.net/pub/software/unix/X11/xruskb-A.B.C.tar.gz
   ftp://ftp.relcom.ru/pub/x11/cyrillic/xruskb-A.B.C.tar.gz

   Пакеты  (package)  Xrus  для   Solaris,  собранные  Дмитрием
Антиповым <dima@elvis.msk.su>:
   ftp://ftp.elvis.ru/pub/sun/Solaris/             SPARC
   ftp://ftp.elvis.ru/pub/sun/Solaris/x86/         Intel
   или соответственно, с описанием что есть что:
   http://ftp.elvis.ru/ftp/pub/sun/Solaris/
   http://ftp.elvis.ru/ftp/pub/sun/Solaris/x86/

   Дерево объектов (для Motif-версии)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ApplicationShell(xrus)
   |
   +-XmForm(form)
     |
     +-XmPushButton(modeButton0)
     +-XmPushButton(modeButton1)

   XmMenuShell()
   |
   +-XmRowColumn(menu)
     |
     +-XmPushButton(lock)
     +-XmPushButton(props)
     +-XmCascadeButton(altmap) {создается не всегда}
     +-XmPushButton(exit)

   XmMenuShell()
   |
   +-XmRowColumn(altmap_menu)
     |
     +-XmPushButton(altmap0)
     ...
     +-XmPushButton(altmapN)

   XmDialogShell(props)
   |
   +-XmForm(form)
     |
     +-XmFrame(frame1)
     | |
     | +-XmForm(form1)
     |   |
     |   +-XmToggleButton(allow_locker)
     |   +-XmScale(autolock_delay)
     |   +-XmLabel(locker_label)
     |   +-XmTextField(locker)
     |   +-XmPushButton(locker_test)
     |   +-XmPushButton(locker_def)
     |
     +-XmFrame(frame2)
     | |
     | +-XmForm(form2)
     |   |
     |   +-XmToggleButton(use_bell)
     |   +-XmLabel(switch_keys_label)
     |   +-XmTextField(switch_keys)
     |   +-XmLabel(to_lat_keys_label)
     |   +-XmTextField(to_lat_leys)
     |   +-XmLabel(to_rus_keys_label)
     |   +-XmTextField(to_rus_keys)
     |   +-XmPushButton(switch_keys_def)
     |
     +-XmForm(form4)
       |
       +-XmPushButton(ok)
       +-XmPushButton(cancel)
       +-XmPushButton(apply)
       +-XmPushButton(save)

   Автор
   ~~~~~
   Лукьянов Александр Владимирович (Alexander V. Lukyanov)
   e-mail: lav@yars.free.net
   paper-mail:
      150051, Ярославль, пр-кт Авиаторов, 80-45

      Aviatorov st. 80-45, Yaroslavl 150051, Russia

   Распространение и  модификация разрешается в  соответствии с
GNU   General   Public   Licence   (см.   COPYING).   Программа
распространяется без гарантий (NO WARRANTY).
