X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/046b0279b0f3eb827bcc2b2e395e6ea69c019733..968b2eafa31c35c3a95dfc727c7403c972c4bb69:/widgets/bat.lua diff --git a/widgets/bat.lua b/widgets/bat.lua index 0461607..7b14a9a 100644 --- a/widgets/bat.lua +++ b/widgets/bat.lua @@ -7,10 +7,9 @@ --]] -local markup = require("lain.util.markup") +local newtimer = require("lain.helpers").newtimer local first_line = require("lain.helpers").first_line -local beautiful = require("beautiful") local naughty = require("naughty") local wibox = require("wibox") @@ -21,25 +20,24 @@ local setmetatable = setmetatable -- Battery infos -- lain.widgets.bat -local bat = { - status = "not present", - perc = "N/A", - time = "N/A", -} +local bat = {} -function worker(args) +local function worker(args) local args = args or {} + local timeout = args.timeout or 30 local battery = args.battery or "BAT0" - local show_all = args.show_all or false - local refresh_timeout = args.refresh_timeout or 30 - local header = args.header or " Bat " - local header_color = args.header_color or beautiful.fg_normal or "#FFFFFF" - local color = args.color or beautiful.fg_focus or "#FFFFFF" - local shadow = args.shadow or false + local settings = args.settings or function() end - local mybattery = wibox.widget.textbox() + bat.widget = wibox.widget.textbox('') + + function update() + bat_now = { + status = "Not present", + perc = "N/A", + time = "N/A", + watt = "N/A" + } - local mybatteryupdate = function() local present = first_line("/sys/class/power_supply/" .. battery .. "/present") @@ -58,90 +56,63 @@ function worker(args) local tot = first_line("/sys/class/power_supply/" .. battery .. "/energy_full") - bat.status = first_line("/sys/class/power_supply/" + bat_now.status = first_line("/sys/class/power_supply/" .. battery .. "/status") local time_rat = 0 - if bat.status == "Charging" + if bat_now.status == "Charging" then - status = "(+)" time_rat = (tot - rem) / rate - elseif bat.status == "Discharging" + elseif bat_now.status == "Discharging" then - status = "(-)" time_rat = rem / rate - else - status = "(.)" end local hrs = math.floor(time_rat) local min = (time_rat - hrs) * 60 - bat.time = string.format("%02d:%02d", hrs, min) - - local amount = (rem / tot) * 100 - if shadow - then - bat.perc = string.format("%d", amount) - else - bat.perc = string.format("%d%%", amount) - end - - local watt = string.format("%.2fW", (rate * ratev) / 1e12) - - if show_all - then - text = watt .. " " .. bat.perc .. " " .. bat.time .. " " .. bat.status - else - text = bat.perc - end + bat_now.time = string.format("%02d:%02d", hrs, min) + bat_now.perc = (rem / tot) * 100 + bat_now.watt = string.format("%.2fW", (rate * ratev) / 1e12) -- notifications for low and critical states - if amount <= 5 + if bat_now.perc <= 5 then - naughty.notify{ + bat.id = naughty.notify({ text = "shutdown imminent", title = "battery nearly exhausted", position = "top_right", timeout = 15, fg="#000000", bg="#ffffff", - ontop = true - } - elseif amount <= 15 + ontop = true, + replaces_id = bat.id + }).id + elseif bat_now.perc <= 15 then - old_id = naughty.notify{ + bat.id = naughty.notify({ text = "plug the cable", title = "battery low", position = "top_right", - timeout = 5, + timeout = 15, fg="#202020", bg="#cdcdcd", - ontop = true - } + ontop = true, + replaces_id = bat.id + }).id end - else - text = "none" - end - if shadow - then - mybattery:set_text('') - else - mybattery:set_markup(markup(header_color, header) - .. markup(color, text) .. " ") + bat_now.perc = string.format("%d", bat_now.perc) end - end - local mybatterytimer = timer({ timeout = refresh_timeout }) - mybatterytimer:connect_signal("timeout", mybatteryupdate) - mybatterytimer:start() - mybatterytimer:emit_signal("timeout") + widget = bat.widget + settings() + end - bat.widget = mybattery + newtimer("bat", timeout, update) - return setmetatable(bat, { __index = bat.widget }) + return bat.widget end return setmetatable(bat, { __call = function(_, ...) return worker(...) end })