84 lines
2.0 KiB
Lua
84 lines
2.0 KiB
Lua
local icons = require "icons"
|
|
local colors = require("colors").sections.widgets.battery
|
|
|
|
local battery = sbar.add("item", "widgets.battery", {
|
|
position = "right",
|
|
icon = {},
|
|
label = { drawing = false },
|
|
background = { drawing = false },
|
|
padding_left = 8,
|
|
padding_right = 4,
|
|
update_freq = 180,
|
|
popup = { align = "center", y_offset = 4 },
|
|
})
|
|
|
|
local remaining_time = sbar.add("item", {
|
|
position = "popup." .. battery.name,
|
|
icon = {
|
|
string = "Time remaining:",
|
|
width = 100,
|
|
align = "left",
|
|
},
|
|
label = {
|
|
string = "??:??h",
|
|
width = 100,
|
|
align = "right",
|
|
},
|
|
background = { drawing = false },
|
|
})
|
|
|
|
battery:subscribe({ "routine", "power_source_change", "system_woke" }, function()
|
|
sbar.exec("pmset -g batt", function(batt_info)
|
|
local icon = "!"
|
|
|
|
local found, _, charge = batt_info:find "(%d+)%%"
|
|
if found then
|
|
charge = tonumber(charge)
|
|
end
|
|
|
|
local color = colors.high
|
|
local charging, _, _ = batt_info:find "AC Power"
|
|
|
|
if charging then
|
|
icon = icons.battery.charging
|
|
else
|
|
if found and charge > 80 then
|
|
icon = icons.battery._100
|
|
elseif found and charge > 60 then
|
|
icon = icons.battery._75
|
|
elseif found and charge > 40 then
|
|
icon = icons.battery._50
|
|
elseif found and charge > 30 then
|
|
icon = icons.battery._50
|
|
color = colors.mid
|
|
elseif found and charge > 20 then
|
|
icon = icons.battery._25
|
|
color = colors.mid
|
|
else
|
|
icon = icons.battery._0
|
|
color = colors.low
|
|
end
|
|
end
|
|
|
|
battery:set {
|
|
icon = {
|
|
string = icon,
|
|
color = color,
|
|
},
|
|
}
|
|
end)
|
|
end)
|
|
|
|
battery:subscribe("mouse.clicked", function()
|
|
local drawing = battery:query().popup.drawing
|
|
battery:set { popup = { drawing = "toggle" } }
|
|
|
|
if drawing == "off" then
|
|
sbar.exec("pmset -g batt", function(batt_info)
|
|
local found, _, remaining = batt_info:find " (%d+:%d+) remaining"
|
|
local label = found and remaining .. "h" or "No estimate"
|
|
remaining_time:set { label = label }
|
|
end)
|
|
end
|
|
end)
|