aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/quarrel/bind.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/quarrel/bind.lua')
-rw-r--r--.config/awesome/quarrel/bind.lua61
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