X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/342df3ab43dfe857195c3a5921781895718533b8..63455361db71b0dde286f85331c6c69f00a3fba7:/widgets/base.lua

diff --git a/widgets/base.lua b/widgets/base.lua
index 198b6f7..e1ce297 100644
--- a/widgets/base.lua
+++ b/widgets/base.lua
@@ -7,16 +7,17 @@
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
+local read_pipe    = require("lain.helpers").read_pipe
+
 local wibox        = require("wibox")
 
-local io           = io
 local setmetatable = setmetatable
 
--- Basic template for custom widgets 
+-- Basic template for custom widgets
 -- lain.widgets.base
-local base = {}
 
 local function worker(args)
+    local base     = {}
     local args     = args or {}
     local timeout  = args.timeout or 5
     local cmd      = args.cmd or ""
@@ -25,16 +26,17 @@ local function worker(args)
     base.widget = wibox.widget.textbox('')
 
     function base.update()
-        local f = assert(io.popen(cmd))
-        output = f:read("*all")
-        f:close()
-        widget = base.widget
-        settings()
+        if output ~= base.prev then
+            output = read_pipe(cmd)
+            widget = base.widget
+            settings()
+            base.prev = output
+        end
     end
 
-    newtimer(cmd, timeout, update)
+    newtimer(cmd, timeout, base.update)
 
     return setmetatable(base, { __index = base.widget })
 end
 
-return setmetatable(base, { __call = function(_, ...) return worker(...) end })
+return setmetatable({}, { __call = function(_, ...) return worker(...) end })