62 lines
1.8 KiB
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
|