philosoft 04.01.2011 14:45
Я рекомендую — kbdd - запоминание раскладки для каждого окна в тайловых wm
Kbdd — это небольшой демон, для пооконного запоминания раскладок, написанный на чистом C и распространяющийся под лицензией GPL-3. Особенность данного демона в том, что он не зависит от сторонних WM и/или DE. (из заметки автора программы на хабре)Вся соль программы в независимости от WM/DE, что означает — она будет работать там, где xxkb пасует. В моём случае это awesome.
Пользователи gentoo могут установить kbdd из оверлея rion, а пользователи archlinux из AUR. Для остальных: стабильную версию можно взять здесь. Гит https://github.com/qnikst/kbdd.git
Скрипт для автоматической сборки из гита:
UPD:
Виджет для awesome.

+ 0 -
Вот спасибо! Давно искал такую штуку.
Что-то я немного не понял как прикрутить это к awesome.
Никто не разъяснит это на пальцах?
Никто не разъяснит это на пальцах?
Запускать вместе с ним, например через .xinitrс или rc.lua. У меня первый вариант, выглядит так:
#!/bin/bash
# Настройка клавиатуры
setxkbmap us -option
setxkbmap "us,ru" -variant ",winkeys" -model pc105 -option "grp:toggle,grp_led:scroll,compose:rwin,ctrl:nocaps"
#numlockx on
# Настройка иксов
xrdb -merge "${HOME}/.Xdefaults"
xrdb -merge "${HOME}/.XCompose"
# Настройка курсора
xsetroot -cursor_name left_ptr
# Автозагрузка
dropbox start &
xscreensaver -no-splash &
deluge &
kbdd &
# Запуск WM
exec awesome
я про виджет в awesome
чтобы он переключался, когда раскладка меняется
то есть по ссылке в посте
куда вставлять
чтобы он переключался, когда раскладка меняется
то есть по ссылке в посте
куда вставлять
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.." "
end
)
Ну это-то я сразу попробовал.
Только при переключении раскладки ничего не меняется.
Вообщем, мне просто нужно что-нибудь, что показывало бы текущую раскладку
Только при переключении раскладки ничего не меняется.
Вообщем, мне просто нужно что-нибудь, что показывало бы текущую раскладку
А сам виджет на панельку-то добавил? Вот мой, не-модульный, вариант:
-- Keyboard layout widget
kbdwidget = widget({type = "textbox", name = "kbdwidget"})
kbdwidget.border_width = 1
kbdwidget.border_color = beautiful.fg_normal
kbdwidget.text = " Eng "
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> = "Rus"}
kbdwidget.text = " "..lts.." "
end
)
-- <skip>
for s = 1, screen.count() do
-- <skip>
-- Add widgets to the wibox - order matters
mywibox.widgets = {
{
mylauncher,
mytaglist,
mypromptbox,
layout = awful.widget.layout.horizontal.leftright
},
mylayoutbox,
kbdwidget, -- ? добовляем индикатор после часиков
mytextclock,
s == 1 and mysystray or nil,
mytasklist,
layout = awful.widget.layout.horizontal.rightleft
}
end
Правда у меня переключение не в .xinitrс
evdev этим занимается
$ cat ~/.config/awesome/rc/widget/keyboard.lua
local capi = { widget = widget, dbus = dbus }
local util = require("awful.util")
local theme = require("beautiful")
local setmetatable = setmetatable
module("rc.widget.keyboard")
widget = capi.widget({ type = "textbox" })
layouts = { <0> = "<span color='#000000' bgcolor='" .. theme.kbd<0> .. "'> En </span>", <1> = "<span color='#000000' bgcolor='" .. theme.kbd<1> .. "'> Ru </span>" }
widget.text = layouts<0>
capi.dbus.request_name("session", "ru.gentoo.kbdd")
capi.dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'")
capi.dbus.add_signal("ru.gentoo.kbdd", function (src, layout)
widget.text = layouts
widget.background_color = theme.kbd
end)
function set_layout(layout)
util.spawn('dbus-send --type=method_call --session --dest=ru.gentoo.kbdd /ru/gentoo/kbdd ru.gentoo.kbdd.set_layout uint32:' .. (layout or 0))
end
setmetatable(_M, { __call = function (_, ...) return widget end })
А в rc.lua добавляю примерно так (очень упрощённо, т.к. у меня всё модулями подключается):
require('rc.widget.keyboard')
for s = 1, screen.count() do
kbdwidget = rc.widget.keyboard(s)
topbar = wibox({ position = "top", screen = s })
topbar.widgets = {
-- тут всякие виджеты для тегов, лейаутов, часиков и т.п.
kbdwidget,
layout = awful.widget.layout.rightleft
}
end
В качестве бонуса у виджета rc.widget.keyboard есть метод set_layout() для установки раскладки, так что можно написать свой байндинг на переключение раскладки или вообще логику переключения свою придумать и написать.