dots/.config/awesome/misc/helpers.lua

122 lines
2.5 KiB
Lua

local awful = require "awful"
local gears = require "gears"
local xresources = require "beautiful.xresources"
local n = require "naughty".notification
local dpi = xresources.apply_dpi
local vars = require "misc.vars"
local wibox = require "wibox"
local h = {}
-- utils
function h.debug(message)
n { message = tostring(message) }
end
function h.map(t, f)
local nt = {}
for k,v in pairs(t) do
nt[k] = f(v)
end
return nt
end
function h.filter(t, f, dict)
local nt = {}
for k,v in pairs(t) do
if not f(v) then goto continue end
if dict then
nt[k] = v
else
table.insert(nt, v)
end
::continue::
end
return nt
end
-- This is taken from http://lua-users.org/wiki/SortedIteration
-- This version is stripped of comments and empty lines + some stuff is renamed
local function __gen_oindex( t )
local oindex = {}
for key in pairs(t) do
table.insert(oindex, key)
end
table.sort(oindex)
return oindex
end
local function onext(t, state)
local key = nil
if state == nil then
t.__oindex = __gen_oindex(t)
key = t.__oindex[1]
else
for i = 1,#t.__oindex do
if t.__oindex[i] == state then
key = t.__oindex[i+1]
end
end
end
if key then
return key, t[key]
end
t.__oindex = nil
end
function h.opairs(t)
return onext, t, nil
end
-- markup
function h.markup_fg(color, text)
return "<span color=\"" .. color .. "\">" .. text .. "</span>"
end
function h.markup_bg(color, text)
return "<span bgcolor=\"" .. color .. "\">" .. text .. "</span>"
end
-- ui
function h.font(factor)
return vars.text_font .. " " .. vars.font_size * (factor or 1)
end
function h.symbol_font(factor)
return vars.symbol_font .. " " .. vars.font_size * (factor or 1)
end
function h.styled(target)
return gears.table.crush({
bg = vars.colors.bg,
border_color = vars.colors.bright.black,
border_width = vars.border_width,
shape = vars.shape
}, target)
end
function h.popup(args)
args.widget = {
widget = wibox.container.margin,
margins = vars.big_padding,
args.widget
}
return awful.popup(h.styled(args))
end
function h.tooltip(objects, callback)
awful.tooltip(h.styled {
objects = objects,
timer_function = callback,
margin_leftright = vars.padding,
margin_topbottom = vars.padding
})
end
return h