dots/.config/awesome/quarrel/bind.lua

62 lines
1.8 KiB
Lua

local awful = require "awful"
local gtable = require "gears.table"
local insightful = require "ui.insightful"
local qbind = {}
local function get_binding_function(trigger)
if type(trigger) == "number" and trigger <= 5 and trigger > 0 then
return "button"
elseif type(trigger) == "string" then
return "key"
end
error("trigger can only be a mouse button or a key", 2)
end
local function translate_binding(binding, trigger, multiple)
local value = nil
if multiple then
value = trigger[2]
trigger = trigger[1]
end
local awful_binding = {
modifiers = binding.mods,
[get_binding_function(trigger)] = trigger,
on_press = multiple and function(...) binding.press(value, ...) end or binding.press
}
if binding.desc then
awful_binding.description = binding.desc
end
if binding.group then
awful_binding.group = binding.group
end
return awful[get_binding_function(trigger)](awful_binding)
end
function qbind:new(binding)
if not binding.hidden then table.insert(insightful._bindings, binding) end
binding.mods = binding.mods or {}
local awful_bindings = {}
if type(binding.triggers) == "table" then
for _, trigger in ipairs(binding.triggers) do
table.insert(awful_bindings, translate_binding(binding, trigger, true))
end
elseif type(binding.triggers) == "string" or type(binding.triggers) == "number" then
return translate_binding(binding, binding.triggers, false)
else
error("binding.triggers can only be a string or a table")
end
-- for some reason multi-trigger bindings only work if i do this
-- i spent a day debugging this
-- thanks awesome
return gtable.join(table.unpack(awful_bindings))
end
return qbind