madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged.
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
local debug = { getinfo = debug.getinfo }
local newtimer = require("lain.helpers").newtimer
local first_line = require("lain.helpers").first_line
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 naughty = require("naughty")
local wibox = require("wibox")
local string = { format = string.format }
local math = { floor = math.floor }
local tostring = tostring
local setmetatable = setmetatable
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
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
- naughty.destroy(tpbat_notification)
- tpbat_notification = nil
- end
+function tpbat.hide()
+ if not tpbat.notification then return end
+ naughty.destroy(tpbat.notification)
+ tpbat.notification = nil
-function tpbat:show(t_out)
- tpbat:hide()
+function tpbat.show(t_out)
+ tpbat.hide()
- local bat = self.bat
- local t_out = t_out or 0
if bat == nil or not bat:installed() then return end
if bat == nil or not bat:installed() then return end
+ local t_out = t_out or 0
local mfgr = bat:get('manufacturer') or "no_mfgr"
local model = bat:get('model') or "no_model"
local chem = bat:get('chemistry') or "no_chem"
local mfgr = bat:get('manufacturer') or "no_mfgr"
local model = bat:get('model') or "no_model"
local chem = bat:get('chemistry') or "no_chem"
local time = bat:remaining_time()
local msg = "\t"
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")
msg = "...Calculating time remaining..."
else
msg = time .. (status == "charging" and " until charged" or " remaining")
local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem)
.. string.format("\n%s \t\t\t %s", status:upper(), msg)
local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem)
.. 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
+ tpbat.notification = naughty.notify({
+ text = str,
+ timeout = t_out,
+ screen = client.focus and client.focus.screen or 1
tpbat.bat = smapi:battery(battery) -- Create a new battery
local bat = tpbat.bat
tpbat.bat = smapi:battery(battery) -- Create a new battery
local bat = tpbat.bat
- tpbat.widget = wibox.widget.textbox('')
+ tpbat.widget = wibox.widget.textbox()
bat_notification_low_preset = {
title = "Battery low",
bat_notification_low_preset = {
title = "Battery low",
local n = naughty.notify({
preset = bat_notification_low_preset,
title = "SMAPI Battery Warning: Unable to read battery state!",
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."
+ text = "This widget is intended for ThinkPads. Is tp_smapi installed? Check your configs & paths.",
+ screen = client.focus and client.focus.screen or 1
+ function tpbat.update()
bat_now = {
status = "Not present",
perc = "N/A",
bat_now = {
status = "Not present",
perc = "N/A",
then
tpbat.id = naughty.notify({
preset = bat_notification_critical_preset,
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,
}).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
end
widget = tpbat.widget
end
widget = tpbat.widget
- newtimer("tpbat", timeout, update)
+ newtimer("tpbat-" .. bat.name, timeout, tpbat.update)
- widget:connect_signal('mouse::enter', function () tpbat:show() end)
- widget:connect_signal('mouse::leave', function () tpbat:hide() end)
+ widget:connect_signal('mouse::enter', function () tpbat.show() end)
+ widget:connect_signal('mouse::leave', function () tpbat.hide() end)
end
return setmetatable(tpbat, { __call = function(_, ...) return tpbat.register(...) end })
end
return setmetatable(tpbat, { __call = function(_, ...) return tpbat.register(...) end })