2023-03-04 15:04:55 -06:00
|
|
|
|
local awful = require "awful"
|
|
|
|
|
local gtable = require "gears.table"
|
2023-04-04 08:43:40 -05:00
|
|
|
|
local qui = require "quarrel.ui"
|
|
|
|
|
local qtable = require "quarrel.table"
|
|
|
|
|
local qvars = require "quarrel.vars"
|
2023-03-04 15:04:55 -06:00
|
|
|
|
local wibox = require "wibox"
|
|
|
|
|
local rubato = require "lib.rubato"
|
2023-04-04 08:43:40 -05:00
|
|
|
|
local beautiful = require "beautiful"
|
2023-03-04 15:04:55 -06:00
|
|
|
|
local btn = awful.button.names
|
|
|
|
|
|
|
|
|
|
local first_time = true
|
|
|
|
|
local mouse = " "
|
|
|
|
|
|
|
|
|
|
local insightful = {}
|
|
|
|
|
|
|
|
|
|
insightful._toggled = false
|
|
|
|
|
insightful._bindings = {}
|
|
|
|
|
insightful._selected_group = ""
|
2023-04-04 08:43:40 -05:00
|
|
|
|
insightful._selected_group_index = 1
|
2023-03-04 15:04:55 -06:00
|
|
|
|
|
|
|
|
|
insightful._keymap = {
|
2023-04-04 08:43:40 -05:00
|
|
|
|
Control = "Control",
|
|
|
|
|
Mod1 = "Alt",
|
2023-03-04 15:04:55 -06:00
|
|
|
|
ISO_Level3_Shift = "Alt Gr",
|
2023-04-04 08:43:40 -05:00
|
|
|
|
Mod4 = "Super",
|
|
|
|
|
Insert = "Insert",
|
|
|
|
|
Delete = "Delete",
|
|
|
|
|
Next = "Page Up",
|
|
|
|
|
Prior = "Page Down",
|
|
|
|
|
Left = "",
|
|
|
|
|
Up = "",
|
|
|
|
|
Right = "",
|
|
|
|
|
Down = "",
|
|
|
|
|
KP_End = "1",
|
|
|
|
|
KP_Down = "#2",
|
|
|
|
|
KP_Next = "#3",
|
|
|
|
|
KP_Left = "#4",
|
|
|
|
|
KP_Begin = "#5",
|
|
|
|
|
KP_Right = "#6",
|
|
|
|
|
KP_Home = "#7",
|
|
|
|
|
KP_Up = "#8",
|
|
|
|
|
KP_Prior = "#9",
|
|
|
|
|
KP_Insert = "#0",
|
|
|
|
|
KP_Delete = "#.",
|
|
|
|
|
KP_Divide = "#/",
|
|
|
|
|
KP_Multiply = "#*",
|
|
|
|
|
KP_Subtract = "#-",
|
|
|
|
|
KP_Add = "#+",
|
|
|
|
|
KP_Enter = "#Enter",
|
|
|
|
|
Escape = "Esc",
|
|
|
|
|
Tab = "Tab",
|
|
|
|
|
space = "Space",
|
|
|
|
|
Return = "Enter",
|
|
|
|
|
dead_acute = "´",
|
|
|
|
|
dead_circumflex = "^",
|
|
|
|
|
dead_grave = "`",
|
|
|
|
|
XF86MonBrightnessUp = "🔆+",
|
2023-03-04 15:04:55 -06:00
|
|
|
|
XF86MonBrightnessDown = "🔅-",
|
|
|
|
|
XF86AudioRaiseVolume = "ﱛ",
|
|
|
|
|
XF86AudioLowerVolume = "ﱜ",
|
|
|
|
|
XF86AudioMute = "ﱝ",
|
|
|
|
|
XF86AudioPlay = "⏯",
|
|
|
|
|
XF86AudioPrev = "⏮",
|
|
|
|
|
XF86AudioNext = "⏭",
|
|
|
|
|
XF86AudioStop = "⏹",
|
|
|
|
|
[tostring(btn.LEFT)] = mouse .. "Left",
|
|
|
|
|
[tostring(btn.MIDDLE)] = mouse .. "Middle",
|
|
|
|
|
[tostring(btn.RIGHT)] = mouse .. "Right"
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-04 08:43:40 -05:00
|
|
|
|
insightful._widget = qui.popup {
|
2023-03-04 15:04:55 -06:00
|
|
|
|
visible = false,
|
|
|
|
|
ontop = true,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
placement = function(d)
|
|
|
|
|
awful.placement.top(d, {
|
|
|
|
|
margins = {
|
|
|
|
|
top = beautiful.useless_gap * 2
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
end,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
minimum_height = screen[1].geometry.height / 2,
|
|
|
|
|
minimum_width = screen[1].geometry.width / 2,
|
|
|
|
|
widget = {
|
|
|
|
|
layout = wibox.layout.fixed.vertical,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
spacing = qvars.big_padding,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
id = "layout_container"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function insightful:_generate()
|
|
|
|
|
local grouped_binds = {}
|
|
|
|
|
local layout_container = insightful._widget.widget.layout_container
|
|
|
|
|
|
|
|
|
|
for _, keybind in ipairs(self._bindings) do
|
|
|
|
|
local group = keybind.group or "general"
|
|
|
|
|
local group_exists = grouped_binds[group] ~= nil
|
|
|
|
|
|
|
|
|
|
if not group_exists then
|
|
|
|
|
grouped_binds[group] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(grouped_binds[group], {
|
|
|
|
|
mods = keybind.mods,
|
|
|
|
|
triggers = keybind.triggers,
|
|
|
|
|
desc = keybind.desc
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
|
2023-04-04 08:43:40 -05:00
|
|
|
|
for group, keybinds in qtable.opairs(grouped_binds) do
|
2023-03-04 15:04:55 -06:00
|
|
|
|
local group_layout = {
|
2023-04-04 08:43:40 -05:00
|
|
|
|
spacing = qvars.padding,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
layout = wibox.layout.fixed.vertical
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, keybind in ipairs(keybinds) do
|
|
|
|
|
local key_layout = {
|
|
|
|
|
layout = wibox.layout.fixed.horizontal
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local key_and_desc_layout = {
|
|
|
|
|
nil, -- key
|
|
|
|
|
nil,
|
|
|
|
|
nil, -- description?
|
|
|
|
|
layout = wibox.layout.align.horizontal
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, mod in ipairs(keybind.mods) do
|
2023-04-04 08:43:40 -05:00
|
|
|
|
table.insert(key_layout, 1, qui.styled {
|
2023-03-04 15:04:55 -06:00
|
|
|
|
widget = wibox.container.background,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
bg = qvars.colors.bright.black,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
border_width = 0,
|
|
|
|
|
{
|
|
|
|
|
widget = wibox.container.margin,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
margins = qvars.padding,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
{
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = insightful._keymap[mod] or mod
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
table.insert(key_layout, 2, {
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = " + "
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if type(keybind.triggers) == "string" or type(keybind.triggers) == "number" then
|
|
|
|
|
table.insert(key_layout, {
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = insightful._keymap[tostring(keybind.triggers)] or keybind.triggers
|
|
|
|
|
})
|
|
|
|
|
elseif type(keybind.triggers) == "table" then
|
|
|
|
|
local display_trigger = {}
|
|
|
|
|
for _, trigger in ipairs(keybind.triggers) do
|
|
|
|
|
table.insert(display_trigger, insightful._keymap[trigger[1]] or trigger[1])
|
|
|
|
|
end
|
|
|
|
|
table.insert(key_layout, {
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = table.concat(display_trigger, "/")
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if keybind.desc then
|
|
|
|
|
key_and_desc_layout[3] = {
|
|
|
|
|
widget = wibox.container.background,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
fg = qvars.colors.dim.fg,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
{
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = keybind.desc
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
key_and_desc_layout[1] = key_layout
|
|
|
|
|
|
|
|
|
|
table.insert(group_layout, key_and_desc_layout)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
layout_container:add {
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
widget = wibox.container.background,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
bg = qvars.colors.yellow,
|
|
|
|
|
fg = qvars.colors.bg,
|
|
|
|
|
shape = qvars.shape,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
{
|
|
|
|
|
widget = wibox.container.margin,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
margins = qvars.padding,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
{
|
|
|
|
|
widget = wibox.widget.textbox,
|
|
|
|
|
text = group
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
nil,
|
|
|
|
|
layout = wibox.layout.align.horizontal
|
|
|
|
|
},
|
|
|
|
|
group_layout,
|
2023-04-04 08:43:40 -05:00
|
|
|
|
spacing = qvars.padding,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
layout = wibox.layout.fixed.vertical
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local timed = rubato.timed {
|
2023-04-04 08:43:40 -05:00
|
|
|
|
duration = qvars.anim_duration,
|
|
|
|
|
intro = qvars.anim_intro,
|
2023-03-04 15:04:55 -06:00
|
|
|
|
pos = 0,
|
|
|
|
|
subscribed = function(pos)
|
|
|
|
|
insightful._widget.opacity = pos
|
|
|
|
|
|
|
|
|
|
if pos == 0 then
|
|
|
|
|
insightful._widget.visible = false
|
|
|
|
|
else
|
|
|
|
|
insightful._widget.visible = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function insightful:toggle()
|
|
|
|
|
if first_time then
|
2023-04-04 08:43:40 -05:00
|
|
|
|
insightful:_generate()
|
2023-03-04 15:04:55 -06:00
|
|
|
|
first_time = false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
timed.target = insightful._toggled and 0 or 1
|
|
|
|
|
insightful._toggled = not insightful._toggled
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return insightful
|