Keyboard layouts with kbdd/ru

= Awesome 3 и kbdd =

kbdd выступает в качестве  к лав иа тур ного д емона. Это простой демон, который предназначен для запуска в сессии X11 и запоминании клавиатурной схемы для каждого окна. Это очень удобно, если вы не хотите постоянно переключаться туда-сюда, когда печатаете в терминале (обычно на английской раскладке) или в каком то чате (на русском например). Еще одной полезной вещью данного демона является поддержка уведомлений D-Bus(опционально) - что позволяет иму выдавать сигналы об изменении раскладки, что делает возможным создание на его основе виджета.

Во первых, посетите домашнюю страницу kbdd и установите последнюю версию (по словам автора шансы найти его в репозитории очень низки, но у меня в Debian, он нашелся легко #apt-get install kbdd). Gentoo пользователя рекомендуется использовать rion overlay.

Убедитесь, что вы верно настроили ваш сервер Xorg, и kbdd использует его настройки (чтобы не мучаться с настройками, можно сначала запустить Х, а затем уже в секции автозапуска файла rc.lua запусить kbdd). Затем запустите kbdd.

Следующий код позволит вам создать виджет для Awesome:

Awesome <3.5 -- Виджет переключателя клавиатуры kbdwidget = widget({type = "textbox", name = "kbdwidget"}) kbdwidget.border_width = 1 kbdwidget.border_color = beautiful.fg_normal kbdwidget.text = " Eng "

Awesome 3.5+ version: -- Виджет переключения клавиатуры kbdwidget = wibox.widget.textbox(" Eng ") kbdwidget.border_width = 1 kbdwidget.border_color = beautiful.fg_normal kbdwidget:set_text(" Eng ")

…следующий код разместите где угодно(можно даже после инициализации виджета), он прослушивает уведомления D-Bus (для не gentoo систем ничего менять не нужно):

dbus.request_name("session", "ru.gentoo.kbdd") dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'") dbus.add_signal("ru.gentoo.kbdd", function(...)   local data = {...}    local layout = data[2]    lts = {[0] = "Eng", [1] = "Рус"}    kbdwidget.text = " "..lts[layout].." "    end )

Awesome 3.5+ version: kbdstrings = {[0] = " Eng ", [1] = " Рус "}

dbus.request_name("session", "ru.gentoo.kbdd") dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'") dbus.connect_signal("ru.gentoo.kbdd", function(...)   local data = {...}    local layout = data[2]    kbdwidget:set_markup(kbdstrings[layout])    end )

В этом примере первой раскладкой (пронумерованна "0") является Английская, и обознчаена как "Eng", а вторая Русская ("1", "Рус"). Отредактируйте его как вам угодно, меняйте фон, добавляйте изображение вместо текста и т.д.

Это простейший пример. Смотрите kbdd wiki и управляйте в деталях прослушивание и управление D-Bus.

Расширение раскладок и оформления
Здесь описан более сложный пример использования kbdd-производного виджета с фоновым изображением и меню выбора раскладки написанная Mellon. * Левая кнопка мыши переключает между двумя наиболее частыми раскладками. * Средняя кнопка переключает на следущую раскладку. * Правая клавиша открывает меню. Виджет изменяет состояние в соотвествии с сигналами kbdd через D-BUSs, раскладки меняются вызовом метода kbdd D-BUS. Код может изменяться, поэтому смотрите пример здесь и убедитесь, что он соответсвует последней версии на GoogleCode.



Файл kbd.lua --

--

--

Файл rc.lua --

-- Add widgets to the wibox - order matters mywibox[s].widgets = { --    ...        s == 1 and kbdwidget or nil, --    ...    }

-- My keybindings globalkeys = awful.util.table.join(globalkeys,   awful.key({ modkey, "Mod1"    }, "1",     function  os.execute(kbd_dbus_sw_cmd .. "0") end),    awful.key({ modkey, "Mod1"    }, "2",     function  os.execute(kbd_dbus_sw_cmd .. "1") end),    awful.key({ modkey, "Mod1"    }, "3",     function  os.execute(kbd_dbus_sw_cmd .. "2") end),    awful.key({ modkey, "Mod1"    }, "4",     function  os.execute(kbd_dbus_sw_cmd .. "3") end),    awful.key({  "Control"  }, "ISO_Level3_Shift",     function  os.execute(kbd_dbus_prev_cmd) end) )

Иконки использовались из translatoid's (translator plasmoid using google translator).