X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/ef6383061bbfefd09bbb28b8ce6e61e7074cce62..434d5f32aa3a19763bf6bb2eed40f881fd918309:/widgets/contrib/kbdlayout.lua diff --git a/widgets/contrib/kbdlayout.lua b/widgets/contrib/kbdlayout.lua index cd753f6..8132c77 100644 --- a/widgets/contrib/kbdlayout.lua +++ b/widgets/contrib/kbdlayout.lua @@ -7,22 +7,20 @@ --]] local helpers = require("lain.helpers") - local awful = require("awful") local wibox = require("wibox") - local string = { format = string.format, match = string.match } local execute = os.execute - local setmetatable = setmetatable -- Keyboard layout switcher -- lain.widgets.contrib.kblayout +local kbdlayout = helpers.make_widget_textbox() local function worker(args) - local kbdlayout = {} - local layouts = args.layouts + local args = args or {} + local layouts = args.layouts or {} local settings = args.settings or function () end local add_us_secondary = true local timeout = args.timeout or 5 @@ -30,14 +28,7 @@ local function worker(args) if args.add_us_secondary == false then add_us_secondary = false end - kbdlayout.widget = wibox.widget.textbox() - - -- Mouse bindings - kbdlayout.widget:buttons(awful.util.table.join( - awful.button({ }, 1, function () kbdlayout.next() end), - awful.button({ }, 3, function () kbdlayout.prev() end))) - - local function run_settings(layout, variant) + local function kbd_run_settings(layout, variant) kbdlayout_now = { layout = string.match(layout, "[^,]+"), -- Make sure to match the primary layout only. variant = variant @@ -47,14 +38,14 @@ local function worker(args) end function kbdlayout.update() - helpers.async(string.format("%s -c 'setxkbmap -query'", awful.util.shell), - function(status) - run_settings(string.match(status, "layout:%s*([^\n]*)"), + helpers.async("setxkbmap -query", function(status) + kbd_run_settings(string.match(status, "layout:%s*([^\n]*)"), string.match(status, "variant:%s*([^\n]*)")) end) end function kbdlayout.set(i) + if #layouts == 0 then return end idx = ((i - 1) % #layouts) + 1 -- Make sure to wrap around as needed. local to_execute = "setxkbmap " .. layouts[idx].layout @@ -67,21 +58,21 @@ local function worker(args) end if execute(to_execute) then - run_settings(layouts[idx].layout, layouts[idx].variant) + kbd_run_settings(layouts[idx].layout, layouts[idx].variant) end end - function kbdlayout.next() - kbdlayout.set(idx + 1) - end + function kbdlayout.next() kbdlayout.set(idx + 1) end + function kbdlayout.prev() kbdlayout.set(idx - 1) end - function kbdlayout.prev() - kbdlayout.set(idx - 1) - end + -- Mouse bindings + kbdlayout.widget:buttons(awful.util.table.join( + awful.button({ }, 1, function () kbdlayout.next() end), + awful.button({ }, 3, function () kbdlayout.prev() end))) helpers.newtimer("kbdlayout", timeout, kbdlayout.update) - return setmetatable(kbdlayout, { __index = kbdlayout.widget }) + return kbdlayout end return setmetatable({}, { __call = function (_, ...) return worker(...) end })