aboutsummaryrefslogtreecommitdiff
path: root/batat.lua
blob: dce5820139bfb01fe3ab1f3c6584133911614993 (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
----------------------------------------------------------
-- Licensed under the GNU General Public License version 2
--  * Copyright (C) 2009 Adrian C. <anrxc_sysphere_org>
----------------------------------------------------------

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


-- Batat: provides state, charge, and remaining time for all batteries using acpitool
module("vicious.batat")


-- {{{ 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 line:match("^[%s]+Battery.*") then
            -- Store state and charge information
            table.insert(battery_info, (battery_state[line:match("([%a]*),")] or "/"))
            table.insert(battery_info, (line:match("([%d]?[%d]?[%d])%.") or "/"))
            -- Store remaining time information
            table.insert(battery_info, (line:match("%%,%s(.*)") or "/"))
        else
            return {"/", "/", "/"}
        end
    end
    f:close()

    return battery_info
end
-- }}}

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