Думаю, никто не будет со мной спорить, что лучшее — враг хорошего, а к хорошему привыкаешь быстро. Поэтому, перейдя на оконный менеджер awesome, я долгое время испытывал неудобства от отсутствия запоминания клавиатурных раскладок для каждого окна (как это делается, к примеру, в KDE).
Отношения мои с клавиатурой вообще достойны отдельного повествования:
- сначала я перенёс переключатель раскладок языка на клавишу CapsLock. Это оказалось очень удобно: можно переключить раскладки лёгким движением мизинца, не снимая рук с клавиатуры при слепом наборе
- потом, для ускорения работы я сделал несколько удобных клавиатурно-мышиных шоткатов с помощью xbindkeys и xvkbd
- ну и сам переход из KDE в awesome предполагает, что практически всё (манипуляции окнами, рабочими столами и фокусом можно делать без мыши). Практически, мышь используется только в броузере
- поначалу я использовал xneur, который помимо автоисправления текста делал и автозапоминание тоже. Но глюки xneur в конце концов стали доставать, и я вначале выключил в нём автоисправление, а потом вообще отказался от его использования. Сейчас я уже и не вспомню, но он что-то с клавиатурой делал (уже не помню что 🙂 , но когда я его выключил, сразу все глюки прекратились)
- ну и наконец, задумался о запоминании раскладки для каждого окна. Надо сказать, что попыток приручить xxkb я предпринял довольно много. Последней каплей оказался переезд на новую рабочую станцию HP Compaq dc5800 Small Form Factor (Core(TM)2 Quad CPU Q9400 @ 2.66GHz, 4ГБ). После того, как я установил на неё openSUSE 11.2 и перенёс все конфиги со старой машины, захотелось ещё “подвигов”. Тем более, что все программы на новой машине стали работать гораздо быстрее и безглючнее, чем на старой.
Судя по источникам, близким к интернету, организовать запоминание раскладок можно организовать с помощью программы xxkb. Взять её последнюю версию xxkb-1.10 можно здесь (русский автор, однако!). Правда, собрать под мой xorg-7.4 (OpenSUSE 11.2) у меня не получилось:
flycat@dt-0698:~/downloads/x/xxkb-1.10> make gcc -O2 -I/usr/include -Dlinux -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DFUNCPROTO=15 -DNARROWPROTO -DAPPDEFDIR=\"/usr/share/X11/app-defaults\" -DPIXMAPDIR=\"/usr/share/xxkb\" -c -o resource.o resource.c resource.c:1:22: error: X11/Xlib.h: Нет такого файла или каталога resource.c:2:27: error: X11/Xresource.h: Нет такого файла или каталога resource.c:3:23: error: X11/Xutil.h: Нет такого файла или каталога In file included from resource.c:8: wlist.h:10: error: expected specifier-qualifier-list before ‘Window’ wlist.h:18: error: expected ‘)’ before ‘w’ wlist.h:19: error: expected ‘)’ before ‘button’ wlist.h:20: error: expected ‘)’ before ‘w’ wlist.h:21: error: expected ‘)’ before ‘w’ ... поскипано много-много сообщений об ошибках .... /usr/include/string.h:127: note: expected ‘const char * __restrict__’ but argument is of type ‘struct <anonymous> *’ resource.c:470: error: request for member ‘addr’ in something not a structure or union resource.c:470: warning: passing argument 1 of ‘strlen’ from incompatible pointer type /usr/include/string.h:397: note: expected ‘const char *’ but argument is of type ‘struct <anonymous> *’ make: *** [resource.o] Ошибка 1
Тогда я подумал-подумал и по запросу в Google “xxkb x86_64 rpm” нашёл xxkb-1.11-6.1.x86_64.rpm! Притом, что у разработчика последняя версия — 1.10! Чудеса, да и только! Тем не менее, программа установилась и после некоторой правки /usr/share/X11/app-defaults/XXkb запустилась. Нужно было отключить вывод индикатора статуса. Но работать всё равно не стала. То есть, в памяти xxkb тихо и незаметно присутствовал, но требуемых действий (сохранение раскладок клавиатуры для каждого окна) не делал.
Я начал гуглить на предмет взаимодействия xxkb с Awesome. Попутно выяснилось, что взаимодействуют они плохо, но отступать было уже некуда, и вот мне попалось такое обсуждение, где посоветовали включить
XXkb.controls.add_when_change: yes XXkb.controls.focusout: yes
И всё заработало! Правда, Firefox и Thunderbird почему-то всё равно сбрасывали раскладку, но главное — при переключении из консоли (где практически всегда нужна латиница) в kopete (где нужна кириллица) и обратно раскладка оставалась соответствующая: в консоли — английская, в kopete — русская, что и требовалось. Привожу конфиг /usr/share/X11/app-defaults/XXkb, работающий у меня в Awesome:
XXkb.image.path: /usr/share/xxkb XXkb.group.base: 1 XXkb.group.alt: 2 XXkb.mainwindow.enable: no XXkb.mainwindow.geometry: 48x48 XXkb.mainwindow.image.1: en48.xpm XXkb.mainwindow.image.2: ru48.xpm XXkb.mainwindow.image.3: su48.xpm XXkb.mainwindow.image.4: XXkb.mainwindow.label.font: -misc-*-r-*-20-* XXkb.*.border.color: black XXkb.*.border.width: 0 XXkb.*.label.foreground: white XXkb.*.label.background: blue4 XXkb.*.label.enable: no XXkb.button.enable: no XXkb.button.geometry: 15x15-60+7 XXkb.button.image.1: en15.xpm XXkb.button.image.2: ru15.xpm XXkb.button.image.3: su15.xpm XXkb.button.image.4: XXkb.button.label.font: -misc-*-r-*-13-* XXkb.controls.add_when_start: yes XXkb.controls.add_when_create: yes XXkb.controls.add_when_change: yes XXkb.controls.focusout: yes XXkb.controls.two_state: yes XXkb.controls.button_delete: yes XXkb.controls.button_delete_and_forget: yes XXkb.controls.mainwindow_delete: yes XXkb.mousebutton.1.reverse: no XXkb.mousebutton.3.reverse: no XXkb.bell.enable: no XXkb.ignore.reverse: no
http://sourceforge.net/projects/xxkb/
Да, похоже, проглядел. Хотя, xxkb-1.11-src.tar.gz 37.3 KB 2007-03-15 — думаю, автор давно не обновляет софтину
Эх. Жаль в wmii не рисует иконки. Они были столь удобны..