вторник, 4 марта 2008 г.

xkb, узелок на память.

Вот здесь: http://linuxforum.ru/index.php?showtopic=49203 можно найти интересную серию заметок о настройке "правильного" переключения раскладок клавиатуры. Суть примерно в том что обычная "циклическая" схема переключения не так уж и удобна, ибо результат нажатия хоткея напрямую зависит от текущей раскладки, и в голове надо иметь не только желание: хочу английский, но и понимание того что "сейчас у меня украинский, и мне надо два раза нажать Ctrl+Shift чтобы получить русский". Вообще страшный вариант, поэтому мну украинской раскладки традиционно не имел, да и сейчас не имею - желание писать на украинском возникает чрезвычайно редко. Так вот. Гораздо проще оказывается когда нажатие какого-то определенного сочетания клавиш, включает какой-то четко определенный язык, не зависимо от текущей раскладки. У меня, например, нажал Caps Lock - включился английский, нажал Shift+Caps Lock - включился русский.Схема достаточно удобна, привыкнуть к ней гораздо проще чем кажется, правда, нужно чтобы такое было настроено на всех Десктопах, за которыми вы работаете :)

Настройка достаточно проста:
1. берем файлик http://muaddeep.googlepages.com/mysym (или одноименный файлик у sash-kan'а - они одинаковые), и ложим в /usr/share/X11/xkb/symbols.

2. открываем /usr/share/X11/xkb/rules/xorg , находим в нем секцию
 ! option        =       symbols 

и дописываем в нее:
mycaps                =       +mysym(caps_1)


3. открываем /etc/X11/xorg.conf и прописываем в XkbOptions, как-то так:
  Option          "XkbOptions"    "mycaps,grp_led:caps" 


Этого достаточно если вы пользуетесь каким-нить WM'ом, или KDE. Пользователи Gnome могут заметить что эти настройки сбрасываются и не работают в Гноме. Чтобы заставить эти настройки работать,
а так же добавить возможность выбора этой схемы через обычный Гномовский конфигуратор переключалки раскладок, я сделал следующее:

4. В Debian(и скорее всего в Ubuntu) открываем файл: /etc/X11/xkb/base.xml , в OpenSuSE 10.3 он же у меня нашелся в /usr/share/X11/xkb/rules/base.xml . Находим в этом xml'е секцию: Layout switching, и добавляем туда еще одну опцию:

<configitem>
<name>mycaps </name>
<description>My CapsLock switch </description>
</configitem>



После этого My CapsLock switch появитсяв диалоге Keyboard Preferences в layout options/Layout switching - что нам и нужно было. Возможно прийдется поиграться layout options/Caps Lock key behaviour - в Debian у мну там стоит что-то кастомное, в SuSE работает с дефолтом.

Ну и напоследок, там на форуме в обсуждении заметок, разгорелся спор, по поводу того нужна ли запоминалка раскладки для текущего окна, при не-циклическом переключении. Могу сказать: с запоминалкой удобнее, хотя без нее, при не-циклическом переключении не так смертельно опасно (:.