Merge pull request #45 from stnma7e/master
battery widgets support multiple batteries
This commit is contained in:
commit
23a85097fe
|
@ -67,14 +67,36 @@ local function show_battery_warning()
|
|||
}
|
||||
end
|
||||
|
||||
local last_battery_check = os.time()
|
||||
|
||||
watch("acpi", 10,
|
||||
function(widget, stdout, stderr, exitreason, exitcode)
|
||||
local batteryType
|
||||
local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d?%d)%%,? ?.*')
|
||||
local charge = tonumber(charge_str)
|
||||
|
||||
local battery_info = {}
|
||||
for s in stdout:gmatch("[^\r\n]+") do
|
||||
local _, status, charge_str, time = string.match(s, '(.+): (%a+), (%d?%d?%d)%%,? ?.*')
|
||||
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
|
||||
end
|
||||
|
||||
local charge = 0
|
||||
local status
|
||||
for i, batt in ipairs(battery_info) do
|
||||
if batt.charge >= charge then
|
||||
status = batt.status -- use most charged battery status
|
||||
-- this is arbitrary, and maybe another metric should be used
|
||||
end
|
||||
|
||||
charge = charge + batt.charge
|
||||
end
|
||||
charge = charge // #battery_info -- use average charge for battery icon
|
||||
|
||||
if (charge >= 0 and charge < 15) then
|
||||
batteryType = "battery-empty%s-symbolic"
|
||||
if status ~= 'Charging' then
|
||||
if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then
|
||||
-- if 5 minutes have elapsed since the last warning
|
||||
last_battery_check = time()
|
||||
|
||||
show_battery_warning()
|
||||
end
|
||||
elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic"
|
||||
|
@ -82,11 +104,13 @@ watch("acpi", 10,
|
|||
elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic"
|
||||
elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic"
|
||||
end
|
||||
|
||||
if status == 'Charging' then
|
||||
batteryType = string.format(batteryType, '-charging')
|
||||
else
|
||||
batteryType = string.format(batteryType, '')
|
||||
end
|
||||
|
||||
widget.icon:set_image(PATH_TO_ICONS .. batteryType .. ".svg")
|
||||
|
||||
-- Update popup text
|
||||
|
|
|
@ -38,11 +38,30 @@ local batteryarc = wibox.widget {
|
|||
-- mirror the widget, so that chart value increases clockwise
|
||||
local batteryarc_widget = wibox.container.mirror(batteryarc, { horizontal = true })
|
||||
|
||||
local last_battery_check = os.time()
|
||||
|
||||
watch("acpi", 10,
|
||||
function(widget, stdout, stderr, exitreason, exitcode)
|
||||
local batteryType
|
||||
local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d%d)%%,? ?.*')
|
||||
local charge = tonumber(charge_str)
|
||||
|
||||
local battery_info = {}
|
||||
for s in stdout:gmatch("[^\r\n]+") do
|
||||
local _, status, charge_str, time = string.match(s, '(.+): (%a+), (%d?%d?%d)%%,? ?.*')
|
||||
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
|
||||
end
|
||||
|
||||
local charge = 0
|
||||
local status
|
||||
for i, batt in ipairs(battery_info) do
|
||||
if batt.charge >= charge then
|
||||
status = batt.status -- use most charged battery status
|
||||
-- this is arbitrary, and maybe another metric should be used
|
||||
end
|
||||
|
||||
charge = charge + batt.charge
|
||||
end
|
||||
charge = charge // #battery_info -- use average charge for battery icon
|
||||
|
||||
widget.value = charge / 100
|
||||
if status == 'Charging' then
|
||||
mirrored_text_with_background.bg = beautiful.widget_green
|
||||
|
@ -54,7 +73,10 @@ watch("acpi", 10,
|
|||
|
||||
if charge < 15 then
|
||||
batteryarc.colors = { beautiful.widget_red }
|
||||
if status ~= 'Charging' then
|
||||
if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then
|
||||
-- if 5 minutes have elapsed since the last warning
|
||||
last_battery_check = time()
|
||||
|
||||
show_battery_warning()
|
||||
end
|
||||
elseif charge > 15 and charge < 40 then
|
||||
|
@ -110,4 +132,4 @@ function show_battery_warning()
|
|||
}
|
||||
end
|
||||
|
||||
return batteryarc_widget
|
||||
return batteryarc_widget
|
||||
|
|
Loading…
Reference in New Issue