Pull to refresh

kbdd — простой переключатель раскладок

Reading time4 min
Views3.6K
Kbdd — это небольшой демон, для пооконного запоминания раскладок, написанный на чистом C и распространяющийся под лицензией GPL-3. Особенность данного демона в том, что он не зависит от сторонних WM и/или DE.
Сейчас программа находится в состоянии доводки до конечного состояния: стабилизация API, добавление информации об ошибках, дополнительные проверки передаваемых значений. Поэтому я представляю программу широкому кругу пользователей, для того, чтобы заинтересованные могли её попробовать, внести свои предложения по поводу функционала, покритиковать и т.д. Если Вы заинтересованы, то под катом подробное описание.

В общем случае задача пооконного сохранения раскладки является очень простой, поэтому она была реализована как в плагинах к различным менеджерам окон, так и в различных программах-переключателях клавиш, прилагающихся к графическим средам. Исходя из этого, основной целью данной программы было сделать очередной велосипед программу, которая будет решать эту задачу независимо от используемого ПО, а так же были решены некоторые попутные задачи. При написании данной програмы была проведена попытка выполнить её в unix-стиле, т.е. kbdd должна решать поставленную перед ней задачу и решать её хорошо.

Сразу замечу, что данный проект не является единственным реализующим данный фукнционал, например, есть следующие проекты работающие в подобном направлении:

xxkb — достаточно хорошая программа, служащая многим людям, однако имеющая проблемы с тайлинговыми (точнее no-reparenting) оконными менеджерами.

xneur — гораздо более сложная программа поддерживающая функции автопереключения раскладок, перевода текста в другую раскладку и многое другое.

Важно отметить следующие особенностями kbdd:
  • отсутствие какого-либо интерфейса показа раскладки и визуального интерфейса управления
  • возможность взаимодействия по dbus (необязательная)
  • архитектура, позволяющая добавить дополнительные средства взаимодействия

Ещё раз отмечу, что программа не является индикатором раскладки, потому, что это в любом случае приведёт завязыванию на системный тулкит и проверкам наличия трея. К тому же реализация индикатора может быть решена средствами WM или DE, и в этом случае будет гарантировано отображение, вписывающееся в интерфейс (пример для awesome).
В kbdd реализованы следующие функции для взаимодействия с внешним миром (на текущий момент это только dbus методы и события):
  • получение событий смены текущей раскладки (номер или строковое описание)
  • получение имени раскладки по её номеру
  • переключение на раскладку по её номеру
  • переключение на предыдущую (для данного окна) раскладку

Для того, чтобы использовать kbdd для переключения раскладок по нажатию определенных клавиш можно использовать программу xbindkeys. Для этого необходимо её установить и добавить в конфигурационный фай (~/.xbindkeysrc) следующие строки:

"dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:0"
Mod1+Shift + 1
"dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:1"
Mod1+Shift + 2
..и т.д.
"dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.prev_layout"
Mod1+Shift + 5

Данный конфиг позволит использовать клавиши alt+shift+номер раскладки для переключения на нужную раскладку, это может быть полезно тем, кто использует более 2 раскладок.
Так же существует возможность переключения к последней выбранной раскладке вызовом метода prev_layout. Например, если у вас используются раскладки (1:ru, 2:en, 3:es), то (для данного конфига) при нажатии alt+shift+2 включится английская раскладка, при нажатии на alt+shift+3 включится испанская, но при этом английская раскладка запомнится как «последняя использованная». Таким образом вызов alt+shift+5 переключит раскладку с испанской на английскую, запомнив испанскую как последнюю использованную. В итоге для каждого окна можно использовать циклическое переключение двух раскладок.

Более подробное описание вариантов использования kbdd можно на странице github wiki данного проекта.

Установка, запуск использование

Установка:
сейчас kbdd распространяется только в исходных кодах, которые можно склонировать из git репозитория: git://github.com/qnikst/kbdd.git, или стабильную версию (0.3.2 или 0.4) отсюда
Пользователи Gentoo погут подключить оверлей rion и установить пакет оттуда.

Сборка:
Для сборки kbdd необходимы заголовочные файлы X, заголовочные файлы glib, и (если включено) заголовочные файлы dbus-glib. А для работы программы нужны соответствующие библиотеки. Для устроновки используюется система autotools, при сборке можно указать опции --enable-debug — для более подробного вывода отладочной информации (по умолчанию выключено) и --enable-dbus — для включения подсистемы dbus (по умолчанию включено).

Запуск:
Поскольку kbdd использует стандартные настройки xkb, то не нужно ничего настраивать и можно просто запускать программу.

Чего хочется от заинтересованных пользователей: если кому-нибудь эта программа будет удобна, но не хватает какого-либо функционала, то я буду рад выслушать предложения. Так же я был бы рад, если бы нашёлся человек, готовый сделать или помочь сделать пакеты для остальных дистрибутивов Linux, для того, чтобы можно было распространять программу в более адекватном виде.
Tags:
Hubs:
Total votes 37: ↑32 and ↓5+27
Comments30

Articles