diff options
Diffstat (limited to '.config/awesome/quarrel/bind.lua')
-rw-r--r-- | .config/awesome/quarrel/bind.lua | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/.config/awesome/quarrel/bind.lua b/.config/awesome/quarrel/bind.lua new file mode 100644 index 0000000..327da0b --- /dev/null +++ b/.config/awesome/quarrel/bind.lua @@ -0,0 +1,61 @@ +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 |