--]]
-local newtimer = require("lain.helpers").newtimer
local first_line = require("lain.helpers").first_line
+local make_widget = require("lain.helpers").make_widget_textbox
+local newtimer = require("lain.helpers").newtimer
local naughty = require("naughty")
local wibox = require("wibox")
min = math.min }
local string = { format = string.format }
+local ipairs = ipairs
local type = type
local tonumber = tonumber
local setmetatable = setmetatable
-- lain.widgets.bat
local function worker(args)
- local bat = {}
+ local bat = make_widget()
local args = args or {}
local timeout = args.timeout or 30
local batteries = args.batteries or (args.battery and {args.battery}) or {"BAT0"}
local notify = args.notify or "on"
local settings = args.settings or function() end
- bat.widget = wibox.widget.textbox('')
-
bat_notification_low_preset = {
title = "Battery low",
text = "Plug the cable!",
end
end
+ -- When one of the battery is charging, others' status are either
+ -- "Full", "Unknown" or "Charging". When the laptop is not plugged in,
+ -- one or more of the batteries may be full, but only one battery
+ -- discharging suffices to set global status to "Discharging".
bat_now.status = bat_now.n_status[1]
+ for _,status in ipairs(bat_now.n_status) do
+ if status == "Discharging" or status == "Charging" then
+ bat_now.status = status
+ end
+ end
bat_now.ac_status = tonumber(first_line(string.format("%s%s/online", pspath, ac))) or "N/A"
if bat_now.status ~= "N/A" then
newtimer(battery, timeout, bat.update)
- return setmetatable(bat, { __index = bat.widget })
+ return bat
end
return setmetatable({}, { __call = function(_, ...) return worker(...) end })