144 lines
3.0 KiB
Lua
Executable File
144 lines
3.0 KiB
Lua
Executable File
local battery = req_rel(..., "util")
|
|
local widget = {}
|
|
local dotgrid = require("widgets.dotgrid")
|
|
|
|
-- Percentages to warn at
|
|
-- (must be in order least -> greatest)
|
|
widget.warnings = {
|
|
5, 10, 25, 50
|
|
}
|
|
|
|
widget.warninglog = {}
|
|
|
|
for i=1, #widget.warnings do
|
|
widget.warninglog[i] = false
|
|
end
|
|
|
|
|
|
widget.dots = dotgrid:new();
|
|
widget.dots.on_color = {1, 0, 0}
|
|
widget.dots.off_color = {0.5, 0, 0}
|
|
widget.dots.spacing = beautiful.dpi(2)
|
|
|
|
widget.widget = wibox.widget {
|
|
{
|
|
widget.dots,
|
|
top = beautiful.dpi(2),
|
|
bottom = beautiful.dpi(2),
|
|
left = beautiful.dpi(2),
|
|
right = beautiful.dpi(2),
|
|
layout = wibox.container.margin,
|
|
},
|
|
layout = wibox.container.background,
|
|
}
|
|
|
|
|
|
widget.widget:connect_signal("mouse::enter", function(result)
|
|
widget.widget.bg = beautiful.color.bar.hover_bg
|
|
end)
|
|
|
|
widget.widget:connect_signal("mouse::leave", function(result)
|
|
widget.widget.bg = beautiful.color.transparent
|
|
end)
|
|
|
|
widget.update = function(stdout)
|
|
local batpec = string.match(stdout, "(%d?%d?%d)%%")
|
|
batpec = tonumber(string.format("% 3d", batpec))
|
|
|
|
local discharging = string.match(stdout, "Discharging") or false
|
|
|
|
-- Handle low power notifications
|
|
if discharging then
|
|
for i=1, #widget.warnings do
|
|
v = widget.warnings[i]
|
|
if (batpec <= v) and (not widget.warninglog[i]) then
|
|
widget.warninglog[i] = true
|
|
|
|
naughty.notify({
|
|
title = "Low power",
|
|
text = "Battery is at " .. tostring(batpec) .. "%",
|
|
icon = beautiful.icons.battery.caution,
|
|
|
|
timeout = 5,
|
|
ignore_suspend = true,
|
|
|
|
border_color = beautiful.color.battery.danger,
|
|
preset = beautiful.notification_templates.bottom_right
|
|
})
|
|
break
|
|
end
|
|
end
|
|
else
|
|
for i=1, #widget.warnings do
|
|
if (batpec >= widget.warnings[i]) then
|
|
widget.warninglog[i] = false
|
|
end
|
|
end
|
|
end
|
|
|
|
widget.dots.value = batpec
|
|
|
|
if discharging then
|
|
widget.dots.on_color = {1, 0, 0}
|
|
widget.dots.off_color = {0.5, 0, 0}
|
|
else
|
|
widget.dots.on_color = {1, 1, 0}
|
|
widget.dots.off_color = {0.5, 0.5, 0}
|
|
end
|
|
|
|
widget.dots:emit_signal("widget::redraw_needed")
|
|
end
|
|
|
|
widget.readupdate = function()
|
|
battery.status(
|
|
function(stdout, stderr, exitreason, exitcode)
|
|
widget.update(stdout)
|
|
end
|
|
)
|
|
end
|
|
|
|
|
|
widget.widget:connect_signal("button::press",
|
|
function(_, _, _, button, mods)
|
|
if (button == 1) then
|
|
battery.status(
|
|
function(stdout, stderr, exitreason, exitcode)
|
|
local batpec = string.match(stdout, "(%d?%d?%d)%%")
|
|
batpec = tonumber(string.format("% 3d", batpec))
|
|
|
|
local batstat = string.match(stdout, "Discharging") or false
|
|
|
|
debug_message(batpec)
|
|
|
|
if batstat then
|
|
batstat = "Discharging, "
|
|
else
|
|
batstat = "Charging, "
|
|
end
|
|
|
|
local out = naughty.notify({
|
|
title = "Battery:",
|
|
text = batstat .. batpec .. "%",
|
|
icon = widget.icon.image,
|
|
replaces_id = widget.notid,
|
|
ignore_suspend = true,
|
|
|
|
preset = beautiful.notification_templates.bottom_right
|
|
})
|
|
widget.notid = out.id
|
|
end
|
|
)
|
|
end
|
|
end
|
|
)
|
|
|
|
battery.watch(
|
|
2,
|
|
function(_, stdout)
|
|
widget.update(stdout)
|
|
end,
|
|
widget.widget
|
|
)
|
|
|
|
return widget
|