From b963bb6bde2b708e6f01b8a9d469d960501a2e0a Mon Sep 17 00:00:00 2001 From: luke bonham Date: Thu, 26 Sep 2013 11:35:59 +0200 Subject: [PATCH 1/1] thinkpad bat widget integrated --- widgets/contrib/init.lua | 2 +- widgets/contrib/tpbat/init.lua | 53 ++++++++++--------- widgets/contrib/tpbat/smapi.lua | 92 +++++++++++++++++---------------- 3 files changed, 78 insertions(+), 69 deletions(-) diff --git a/widgets/contrib/init.lua b/widgets/contrib/init.lua index 81321c6..9a9fa63 100644 --- a/widgets/contrib/init.lua +++ b/widgets/contrib/init.lua @@ -4,7 +4,7 @@ Lain Layouts, widgets and utilities for Awesome WM - User contributed widgets section + Users contributed widgets section Licensed under GNU General Public License v2 * (c) 2013, Luke Bonham diff --git a/widgets/contrib/tpbat/init.lua b/widgets/contrib/tpbat/init.lua index 1bb6a9b..206fd38 100644 --- a/widgets/contrib/tpbat/init.lua +++ b/widgets/contrib/tpbat/init.lua @@ -1,36 +1,41 @@ ---[[ - 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 + if tpbat_notification ~= nil then naughty.destroy(tpbat_notification) tpbat_notification = nil @@ -39,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" @@ -50,9 +57,9 @@ function tpbat:show(t_out) local time = bat:remaining_time() local msg = "\t" - if status ~= "idle" and status ~= "nil" + if status ~= "idle" and status ~= "nil" then - if time == "N/A" + if time == "N/A" then msg = "...Calculating time remaining..." else @@ -63,7 +70,7 @@ 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 }, @@ -80,10 +87,10 @@ 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 + if bat:get('state') == nil then local n = naughty.notify({ title = "SMAPI Battery Warning: Unable to read battery state!", @@ -141,13 +148,13 @@ function tpbat.register(args) 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) - 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 diff --git a/widgets/contrib/tpbat/smapi.lua b/widgets/contrib/tpbat/smapi.lua index 59b916b..862d4cd 100644 --- a/widgets/contrib/tpbat/smapi.lua +++ b/widgets/contrib/tpbat/smapi.lua @@ -1,9 +1,11 @@ ---[[ - smapi.lua - Interface with thinkpad battery information +--[[ + + smapi.lua + Interface with thinkpad battery information + Licensed under GNU General Public License v2 - * (c) 2013, Conor Heine + * (c) 2013, Conor Heine --]] @@ -19,42 +21,42 @@ local apipath = "/sys/devices/platform/smapi" -- Most are readable values, but some can be written to (not implemented, yet?) local readable = { - barcoding = true, - charging_max_current = true, - charging_max_voltage = true, - chemistry = true, - current_avg = true, - current_now = true, - cycle_count = true, - design_capacity = true, - design_voltage = true, - dump = true, - first_use_date = true, - force_discharge = false, - group0_voltage = true, - group1_voltage = true, - group2_voltage = true, - group3_voltage = true, - inhibit_charge_minutes = false, - installed = true, - last_full_capacity = true, - manufacture_date = true, - manufacturer = true, - model = true, - power_avg = true, - power_now = true, - remaining_capacity = true, - remaining_charging_time = true, - remaining_percent = true, - remaining_percent_error = true, - remaining_running_time = true, + barcoding = true, + charging_max_current = true, + charging_max_voltage = true, + chemistry = true, + current_avg = true, + current_now = true, + cycle_count = true, + design_capacity = true, + design_voltage = true, + dump = true, + first_use_date = true, + force_discharge = false, + group0_voltage = true, + group1_voltage = true, + group2_voltage = true, + group3_voltage = true, + inhibit_charge_minutes = false, + installed = true, + last_full_capacity = true, + manufacture_date = true, + manufacturer = true, + model = true, + power_avg = true, + power_now = true, + remaining_capacity = true, + remaining_charging_time = true, + remaining_percent = true, + remaining_percent_error = true, + remaining_running_time = true, remaining_running_time_now = true, - serial = true, - start_charge_thresh = false, - state = true, - stop_charge_thresh = false, - temperature = true, - voltage = true, + serial = true, + start_charge_thresh = false, + state = true, + stop_charge_thresh = false, + temperature = true, + voltage = true, } function smapi:battery(name) @@ -62,7 +64,7 @@ function smapi:battery(name) bat.name = name bat.path = apipath .. "/" .. name - + function bat:get(item) return self.path ~= nil and readable[item] and first_line(self.path .. "/" .. item) or nil end @@ -80,11 +82,11 @@ function smapi:battery(name) local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time' local mins_left = self:get(time_val) - if mins_left:find("^%d+") == nil - then - return "N/A" + if mins_left:find("^%d+") == nil + then + return "N/A" end - + local hrs = mins_left / 60 local min = mins_left % 60 return string.format("%02d:%02d", hrs, min) @@ -97,4 +99,4 @@ function smapi:battery(name) return setmetatable(bat, {__metatable = false, __newindex = false}) end -return smapi \ No newline at end of file +return smapi -- 2.39.5