X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/4664741483e8c395d4e042a91552925ab63e5130..763805f5add904469b12167ef594e1890dc304dd:/widgets/contrib/tpbat/init.lua diff --git a/widgets/contrib/tpbat/init.lua b/widgets/contrib/tpbat/init.lua index 673b66c..0a22526 100644 --- a/widgets/contrib/tpbat/init.lua +++ b/widgets/contrib/tpbat/init.lua @@ -1,36 +1,42 @@ ---[[ - tpbat.lua - Battery status widget for ThinkPad laptops that use SMAPI - lain.widgets.contrib.tpbat - - More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi - Licensed under GNU General Public License v2 - * (c) 2013, Conor Heine - * (c) 2013, Luke Bonham - * (c) 2010-2012, Peter Hofmann - +--[[ + + tpbat.lua + Battery status widget for ThinkPad laptops that use SMAPI + lain.widgets.contrib.tpbat + + More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi + + Licensed under GNU General Public License v2 + * (c) 2013, Conor Heine + * (c) 2013, Luke Bonham + * (c) 2010-2012, Peter Hofmann + --]] +local debug = { getinfo = debug.getinfo } 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") -local smapi = require("lain.widgets.contrib.tpbat.smapi") -- Ugly :( local string = { format = string.format } local math = { floor = math.floor } local tostring = tostring local setmetatable = setmetatable +package.path = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .. "?.lua;" .. package.path +local smapi = require("smapi") + -- ThinkPad SMAPI-enabled battery info widget +-- lain.widgets.contrib.tpbat local tpbat = { } - local tpbat_notification = nil function tpbat:hide() - if tpbat_notification ~= nil then + if tpbat_notification ~= nil + then naughty.destroy(tpbat_notification) tpbat_notification = nil end @@ -38,8 +44,10 @@ end function tpbat:show(t_out) tpbat:hide() - - local bat = self.bat + + local bat = self.bat + local t_out = t_out or 0 + if bat == nil or not bat:installed() then return end local mfgr = bat:get('manufacturer') or "no_mfgr" @@ -49,8 +57,10 @@ function tpbat:show(t_out) local time = bat:remaining_time() local msg = "\t" - if status ~= "idle" and status ~= "nil" then - if time == "N/A" then + if status ~= "idle" and status ~= "nil" + then + if time == "N/A" + then msg = "...Calculating time remaining..." else msg = time .. (status == "charging" and " until charged" or " remaining") @@ -60,12 +70,13 @@ function tpbat:show(t_out) end local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem) - str = str .. string.format("\n%s \t\t\t %s", status:upper(), msg) + .. string.format("\n%s \t\t\t %s", status:upper(), msg) tpbat_notification = naughty.notify({ preset = { fg = beautiful.fg_normal }, text = str, - timeout = t_out + timeout = t_out, + screen = client.focus and client.focus.screen or 1 }) end @@ -77,20 +88,34 @@ function tpbat.register(args) tpbat.bat = smapi:battery(battery) -- Create a new battery local bat = tpbat.bat - + tpbat.widget = wibox.widget.textbox('') - if bat:get('state') == nil then - local n = naughty.notify({ - title = "SMAPI Battery Warning: Unable to read battery state!", - text = "This widget is intended for ThinkPads. Is tp_smapi installed? Check your configs & paths.", - position = "top_right", - timeout = 15, - fg="#202020", - bg="#cdcdcd", - ontop = true - }) - end + bat_notification_low_preset = { + title = "Battery low", + text = "Plug the cable!", + timeout = 15, + fg = "#202020", + bg = "#CDCDCD" + } + + bat_notification_critical_preset = { + title = "Battery exhausted", + text = "Shutdown imminent", + timeout = 15, + fg = "#000000", + bg = "#FFFFFF" + } + + if bat:get('state') == nil + then + local n = naughty.notify({ + preset = bat_notification_low_preset, + title = "SMAPI Battery Warning: Unable to read battery state!", + text = "This widget is intended for ThinkPads. Is tp_smapi installed? Check your configs & paths.", + screen = client.focus and client.focus.screen or 1 + }) + end function update() bat_now = { @@ -102,48 +127,41 @@ function tpbat.register(args) if bat:installed() then - bat_now.status = bat:status() + bat_now.status = bat:status() or "N/A" bat_now.perc = bat:percent() bat_now.time = bat:remaining_time() -- bat_now.watt = string.format("%.2fW", (VOLTS * AMPS) / 1e12) - -- notifications for low and critical states - if bat_now.perc <= 5 - then - tpbat.id = naughty.notify({ - text = "shutdown imminent", - title = "battery nearly exhausted", - position = "top_right", - timeout = 15, - fg="#000000", - bg="#ffffff", - ontop = true, - replaces_id = tpbat.id - }).id - elseif bat_now.perc <= 15 + -- notifications for low and critical states (when discharging) + if bat_now.status == "discharging" then - tpbat.id = naughty.notify({ - text = "plug the cable", - title = "battery low", - position = "top_right", - timeout = 15, - fg="#202020", - bg="#cdcdcd", - ontop = true, - replaces_id = tpbat.id - }).id + if bat_now.perc <= 5 + then + tpbat.id = naughty.notify({ + preset = bat_notification_critical_preset, + replaces_id = tpbat.id, + screen = client.focus and client.focus.screen or 1 + }).id + elseif bat_now.perc <= 15 + then + tpbat.id = naughty.notify({ + preset = bat_notification_low_preset, + replaces_id = tpbat.id, + screen = client.focus and client.focus.screen or 1 + }).id + end end bat_now.perc = tostring(bat_now.perc) end - widget = tpbat.widget -- 'widget' needed in rc.lua (following convention) + widget = tpbat.widget settings() end - newtimer("tpbat", timeout, update) + newtimer("tpbat-" .. bat.name, timeout, update) - widget:connect_signal('mouse::enter', function () tpbat:show(0) end) + widget:connect_signal('mouse::enter', function () tpbat:show() end) widget:connect_signal('mouse::leave', function () tpbat:hide() end) return tpbat.widget