aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/misc/helpers.lua
blob: 132a4dfd64012c33ac9eaf80f353a7bac502df64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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