aboutsummaryrefslogtreecommitdiff
path: root/contrib/batacpi.lua
blob: fc7d54ba9a6df2ddfc8dc5a624f5463ed7dcc48d (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
---------------------------------------------------
-- Licensed under the GNU General Public License v2
--  * (c) 2010, Adrian C. <anrxc@sysphere.org>
---------------------------------------------------

-- {{{ Grab environment
local tonumber = tonumber
local io = { popen = io.popen }
local setmetatable = setmetatable
local table = { insert = table.insert }
local string = { match = string.match }
-- }}}


-- Batacpi: provides state, charge, and remaining time for all batteries using acpitool
-- vicious.contrib.batacpi
local batacpi = {}


-- {{{ Battery widget type
local function worker(format)
    local battery_info  = {}
    local battery_state = {
        ["full"] = "↯",
        ["unknown"] = "⌁",
        ["charged"] = "↯",
        ["charging"] = "+",
        ["discharging"] = "-"
    }

    -- Get data from acpitool
    local f = io.popen("acpitool -b")

    for line in f:lines() do
        -- Check if the battery is present
        if string.match(line, "^[%s]+Battery.*") then
            -- Store state and charge information
            table.insert(battery_info, (battery_state[string.match(line, "([%a]*),") or "unknown"]))
            table.insert(battery_info, (tonumber(string.match(line, "([%d]?[%d]?[%d])%.")) or 0))
            -- Store remaining time information
            table.insert(battery_info, (string.match(line, "%%,%s(.*)") or "N/A"))
        else
            return {battery_state["unknown"], 0, "N/A"}
        end
    end
    f:close()

    return battery_info
end
-- }}}

return setmetatable(batacpi, { __call = function(_, ...) return worker(...) end })