From 06d6055374fe358c6ed9263e2f23db5744118cc9 Mon Sep 17 00:00:00 2001 From: streetturtle Date: Wed, 6 Dec 2017 21:07:35 -0500 Subject: [PATCH] Attempt to fix memory leak --- battery-widget/battery.lua | 83 ++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 44 deletions(-) diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua index c23b4b9..936582c 100644 --- a/battery-widget/battery.lua +++ b/battery-widget/battery.lua @@ -1,61 +1,28 @@ -local wibox = require("wibox") local awful = require("awful") local naughty = require("naughty") local watch = require("awful.widget.watch") +local wibox = require("wibox") -- acpi sample outputs -- Battery 0: Discharging, 75%, 01:51:38 remaining -- Battery 0: Charging, 53%, 00:57:43 until charged local PATH_TO_ICONS = "/usr/share/icons/Arc/status/symbolic/" -local USERNAME = os.getenv("USER") +local HOME = os.getenv("HOME") -battery_widget = wibox.widget { +local battery_widget = wibox.widget { { id = "icon", widget = wibox.widget.imagebox, resize = false }, - layout = wibox.container.margin(_, 0, 0, 3), - set_image = function(self, path) - self.icon.image = path - end + layout = wibox.container.margin(_, 0, 0, 3) } -watch( - "acpi", 10, - function(widget, stdout, stderr, exitreason, exitcode) - local batteryType - local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d%d)%%,? ?.*') - local charge = tonumber(charge_str) - if (charge >= 0 and charge < 15) then - batteryType="battery-empty%s-symbolic" - if status ~= 'Charging' then - show_battery_warning() - end - elseif (charge >= 15 and charge < 40) then batteryType="battery-caution%s-symbolic" - elseif (charge >= 40 and charge < 60) then batteryType="battery-low%s-symbolic" - elseif (charge >= 60 and charge < 80) then batteryType="battery-good%s-symbolic" - elseif (charge >= 80 and charge <= 100) then batteryType="battery-full%s-symbolic" - end - if status == 'Charging' then - batteryType = string.format(batteryType,'-charging') - else - batteryType = string.format(batteryType,'') - end - widget.image = PATH_TO_ICONS .. batteryType .. ".svg" - - -- Update popup text - -- TODO: Filter long lines - -- battery_popup.text = string.gsub(stdout, "\n$", "") - end, - battery_widget -) - -- Popup with battery info -- One way of creating a pop-up notification - naughty.notify local notification -function show_battery_status() +local function show_battery_status() awful.spawn.easy_async([[bash -c 'acpi']], function(stdout, _, _, _) notification = naughty.notify{ @@ -67,11 +34,8 @@ function show_battery_status() end ) end -battery_widget:connect_signal("mouse::enter", function() show_battery_status() end) -battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end) -- Alternative to naughty.notify - tooltip. You can compare both and choose the preferred one - --battery_popup = awful.tooltip({objects = {battery_widget}}) -- To use colors from beautiful theme put @@ -79,10 +43,9 @@ battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notific -- beautiful.tooltip_fg = beautiful.fg_normal -- beautiful.tooltip_bg = beautiful.bg_normal ---[[ Show warning notification ]] -function show_battery_warning() +local function show_battery_warning() naughty.notify{ - icon = "/home/" .. USERNAME .. "/.config/awesome/nichosi.png", + icon = HOME .. "/.config/awesome/nichosi.png", icon_size=100, text = "Huston, we have a problem", title = "Battery is dying", @@ -93,3 +56,35 @@ function show_battery_warning() width = 300, } end + +watch("acpi", 10, + function(widget, stdout, stderr, exitreason, exitcode) + local batteryType + local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d%d)%%,? ?.*') + local charge = tonumber(charge_str) + if (charge >= 0 and charge < 15) then + batteryType = "battery-empty%s-symbolic" + if status ~= 'Charging' then + show_battery_warning() + end + elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic" + elseif (charge >= 40 and charge < 60) then batteryType = "battery-low%s-symbolic" + elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic" + elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic" + end + if status == 'Charging' then + batteryType = string.format(batteryType, '-charging') + else + batteryType = string.format(batteryType, '') + end + widget.icon:set_image(PATH_TO_ICONS .. batteryType .. ".svg") + + -- Update popup text + -- battery_popup.text = string.gsub(stdout, "\n$", "") + end, + battery_widget) + +battery_widget:connect_signal("mouse::enter", function() show_battery_status() end) +battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end) + +return battery_widget