]> git.madduck.net Git - etc/awesome.git/commitdiff

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:

merge and resolve conflicts from #134; #114
authorcopycat-killer <dada@archlinux.info>
Mon, 12 Oct 2015 10:09:44 +0000 (12:09 +0200)
committercopycat-killer <dada@archlinux.info>
Mon, 12 Oct 2015 10:09:44 +0000 (12:09 +0200)
16 files changed:
helpers.lua
widgets/abase.lua
widgets/alsa.lua
widgets/alsabar.lua
widgets/base.lua
widgets/bat.lua
widgets/cpu.lua
widgets/fs.lua
widgets/imap.lua
widgets/maildir.lua
widgets/mem.lua
widgets/mpd.lua
widgets/net.lua
widgets/sysload.lua
widgets/temp.lua
wiki

index 4e90e169c15a570bb31aa4c6fa3f1ac9e70c5336..503c40eaf0dbc54df0854e2f86f08e90d4799670 100644 (file)
@@ -76,10 +76,16 @@ end
 
 helpers.timer_table = {}
 
 
 helpers.timer_table = {}
 
-function helpers.newtimer(name, timeout, fun, nostart)
-    helpers.timer_table[name] = capi.timer({ timeout = timeout })
+function helpers.newtimer(_name, timeout, fun, nostart)
+    local name = timeout
+
+    if not helpers.timer_table[name] then
+        helpers.timer_table[name] = capi.timer({ timeout = timeout })
+        helpers.timer_table[name]:start()
+    end
+
     helpers.timer_table[name]:connect_signal("timeout", fun)
     helpers.timer_table[name]:connect_signal("timeout", fun)
-    helpers.timer_table[name]:start()
+
     if not nostart then
         helpers.timer_table[name]:emit_signal("timeout")
     end
     if not nostart then
         helpers.timer_table[name]:emit_signal("timeout")
     end
index 98f7818d844fe2b2c7c004b2ed39a9abacd91eb9..87af8725222f08f3241280021de928d6d17d3971 100644 (file)
@@ -6,9 +6,9 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-local async        = require("lain.asyncshell")
-local wibox        = require("wibox")
+local helpers = require("lain.helpers")
+local async   = require("lain.asyncshell")
+local wibox   = require("wibox")
 
 local setmetatable = setmetatable
 
 
 local setmetatable = setmetatable
 
@@ -19,21 +19,26 @@ local setmetatable = setmetatable
 local function worker(args)
     local abase    = {}
     local args     = args or {}
 local function worker(args)
     local abase    = {}
     local args     = args or {}
-    local timeout  = args.timeout or 5
+    local timeout  = args.timeout or 1
     local cmd      = args.cmd or ""
     local settings = args.settings or function() end
 
     abase.widget = wibox.widget.textbox('')
     local cmd      = args.cmd or ""
     local settings = args.settings or function() end
 
     abase.widget = wibox.widget.textbox('')
+    helpers.set_map(cmd, '')
 
     function abase.update()
         async.request(cmd, function(f)
             output = f
 
     function abase.update()
         async.request(cmd, function(f)
             output = f
-            widget = abase.widget
-            settings()
+
+            if helpers.get_map(cmd) ~= output then
+                widget = abase.widget
+                settings()
+                helpers.set_map(cmd, output)
+            end
         end)
     end
 
         end)
     end
 
-    newtimer(cmd, timeout, abase.update)
+    helpers.newtimer(cmd, timeout, abase.update)
 
     return setmetatable(abase, { __index = abase.widget })
 end
 
     return setmetatable(abase, { __index = abase.widget })
 end
index 85d53114e132a683fe2af8af9f86908af61b8f39..0bb205996054e12ff539e74624af637c3540ffdd 100644 (file)
@@ -19,11 +19,14 @@ local setmetatable    = setmetatable
 
 -- ALSA volume
 -- lain.widgets.alsa
 
 -- ALSA volume
 -- lain.widgets.alsa
-local alsa = {}
+local alsa = {
+    level  = "0",
+    status = "off",
+}
 
 local function worker(args)
     local args     = args or {}
 
 local function worker(args)
     local args     = args or {}
-    local timeout  = args.timeout or 5
+    local timeout  = args.timeout or 1
     local settings = args.settings or function() end
 
     alsa.cmd     = args.cmd or "amixer"
     local settings = args.settings or function() end
 
     alsa.cmd     = args.cmd or "amixer"
@@ -54,8 +57,14 @@ local function worker(args)
             end
         end
 
             end
         end
 
-        widget = alsa.widget
-        settings()
+        if alsa.level ~= volume_now.level or alsa.status ~= volume_now.status
+        then
+            widget = alsa.widget
+            settings()
+
+            alsa.level = volume_now.level
+            alsa.status = volume_now.status
+        end
     end
 
     timer_id = string.format("alsa-%s-%s", alsa.cmd, alsa.channel)
     end
 
     timer_id = string.format("alsa-%s-%s", alsa.cmd, alsa.channel)
index c7498d2e6be2bf31fdac43ba8288e25e8d9eadfe..fc45c726488eb82b17a6fd9d6354f4fdaee19639 100644 (file)
@@ -47,7 +47,8 @@ local alsabar = {
     },
 
     _current_level = 0,
     },
 
     _current_level = 0,
-    _muted         = false
+    _muted         = false,
+    _status        = "off"
 }
 
 function alsabar.notify()
 }
 
 function alsabar.notify()
@@ -56,7 +57,7 @@ function alsabar.notify()
     local preset = {
         title   = "",
         text    = "",
     local preset = {
         title   = "",
         text    = "",
-        timeout = 5,
+        timeout = 1,
         screen  = alsabar.notifications.screen,
         font    = alsabar.notifications.font .. " " ..
                   alsabar.notifications.font_size,
         screen  = alsabar.notifications.screen,
         font    = alsabar.notifications.font .. " " ..
                   alsabar.notifications.font_size,
@@ -94,7 +95,7 @@ end
 
 local function worker(args)
     local args       = args or {}
 
 local function worker(args)
     local args       = args or {}
-    local timeout    = args.timeout or 5
+    local timeout    = args.timeout or 1
     local settings   = args.settings or function() end
     local width      = args.width or 63
     local height     = args.heigth or 1
     local settings   = args.settings or function() end
     local width      = args.width or 63
     local height     = args.heigth or 1
@@ -127,28 +128,33 @@ local function worker(args)
         -- Capture mixer control state:          [5%] ... ... [on]
         local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
 
         -- Capture mixer control state:          [5%] ... ... [on]
         local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
 
-        if volu == nil then
-            volu = 0
-            mute = "off"
-        end
+        volu = tonumber(volu) or 0
+        if mute == "" then mute = "off"
 
 
-        alsabar._current_level = tonumber(volu)
-        alsabar.bar:set_value(alsabar._current_level / 100)
-        if not mute and tonumber(volu) == 0 or mute == "off"
-        then
-            alsabar._muted = true
-            alsabar.tooltip:set_text (" [Muted] ")
-            alsabar.bar:set_color(alsabar.colors.mute)
-        else
-            alsabar._muted = false
-            alsabar.tooltip:set_text(string.format(" %s:%s ", alsabar.channel, volu))
-            alsabar.bar:set_color(alsabar.colors.unmute)
-        end
+        if alsabar._current_level ~= volu or alsabar._status ~= mute then
+
+            alsabar._current_level = volu
+            alsabar._status = mute
+
+            alsabar.bar:set_value(alsabar._current_level / 100)
 
 
-        volume_now = {}
-        volume_now.level = tonumber(volu)
-        volume_now.status = mute
-        settings()
+            if not mute and volu == 0 or mute == "off"
+            then
+                alsabar._muted = true
+                alsabar.tooltip:set_text (" [Muted] ")
+                alsabar.bar:set_color(alsabar.colors.mute)
+            else
+                alsabar._muted = false
+                alsabar.tooltip:set_text(string.format(" %s:%s ", alsabar.channel, volu))
+                alsabar.bar:set_color(alsabar.colors.unmute)
+            end
+
+            volume_now = {}
+            volume_now.level = volu
+            volume_now.status = mute
+
+            settings()
+        end
     end
 
     alsabar.bar:buttons (awful.util.table.join (
     end
 
     alsabar.bar:buttons (awful.util.table.join (
index 2f377f78bb4ccd552bf01f5299476719f21e2d53..88478b0512df99887d318bc26237b7c0a099d02e 100644 (file)
@@ -6,9 +6,7 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-local read_pipe    = require("lain.helpers").read_pipe
-
+local helpers      = require("lain.helpers")
 local wibox        = require("wibox")
 
 local setmetatable = setmetatable
 local wibox        = require("wibox")
 
 local setmetatable = setmetatable
@@ -19,19 +17,24 @@ local setmetatable = setmetatable
 local function worker(args)
     local base     = {}
     local args     = args or {}
 local function worker(args)
     local base     = {}
     local args     = args or {}
-    local timeout  = args.timeout or 5
+    local timeout  = args.timeout or 1
     local cmd      = args.cmd or ""
     local settings = args.settings or function() end
 
     base.widget = wibox.widget.textbox('')
     local cmd      = args.cmd or ""
     local settings = args.settings or function() end
 
     base.widget = wibox.widget.textbox('')
+    helpers.set_map(cmd, '')
 
     function base.update()
 
     function base.update()
-        output = read_pipe(cmd)
-        widget = base.widget
-        settings()
+        output = helpers.read_pipe(cmd)
+
+        if helpers.get_map(cmd) ~= output then
+            widget = base.widget
+            settings()
+            helpers.set_map(cmd, output)
+        end
     end
 
     end
 
-    newtimer(cmd, timeout, base.update)
+    helpers.newtimer(cmd, timeout, base.update)
 
     return setmetatable(base, { __index = base.widget })
 end
 
     return setmetatable(base, { __index = base.widget })
 end
index 61828ecfe9cb98c164c6526becdd75b4db363cc7..d18af87b35001ab4021627fc74e451902e283a8b 100644 (file)
@@ -7,9 +7,7 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-local first_line   = require("lain.helpers").first_line
-
+local helpers      = require("lain.helpers")
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
@@ -48,6 +46,11 @@ local function worker(args)
         bg = "#FFFFFF"
     }
 
         bg = "#FFFFFF"
     }
 
+    helpers.set_map(battery .. "status", "N/A")
+    helpers.set_map(battery .. "perc", "N/A")
+    helpers.set_map(battery .. "time", "N/A")
+    helpers.set_map(battery .. "watt", "N/A")
+
     function update()
         bat_now = {
             status = "Not present",
     function update()
         bat_now = {
             status = "Not present",
@@ -58,22 +61,22 @@ local function worker(args)
 
         local bstr  = "/sys/class/power_supply/" .. battery
 
 
         local bstr  = "/sys/class/power_supply/" .. battery
 
-        local present = first_line(bstr .. "/present")
+        local present = helpers.first_line(bstr .. "/present")
 
         if present == "1"
         then
 
         if present == "1"
         then
-            local rate  = first_line(bstr .. "/power_now") or
-                          first_line(bstr .. "/current_now")
+            local rate  = helpers.first_line(bstr .. "/power_now") or
+                          helpers.first_line(bstr .. "/current_now")
 
 
-            local ratev = first_line(bstr .. "/voltage_now")
+            local ratev = helpers.first_line(bstr .. "/voltage_now")
 
 
-            local rem   = first_line(bstr .. "/energy_now") or
-                          first_line(bstr .. "/charge_now")
+            local rem   = helpers.first_line(bstr .. "/energy_now") or
+                          helpers.first_line(bstr .. "/charge_now")
 
 
-            local tot   = first_line(bstr .. "/energy_full") or
-                          first_line(bstr .. "/charge_full")
+            local tot   = helpers.first_line(bstr .. "/energy_full") or
+                          helpers.first_line(bstr .. "/charge_full")
 
 
-            bat_now.status = first_line(bstr .. "/status") or "N/A"
+            bat_now.status = helpers.first_line(bstr .. "/status") or "N/A"
 
             rate  = tonumber(rate) or 1
             ratev = tonumber(ratev)
 
             rate  = tonumber(rate) or 1
             ratev = tonumber(ratev)
@@ -97,7 +100,7 @@ local function worker(args)
 
             bat_now.time = string.format("%02d:%02d", hrs, min)
 
 
             bat_now.time = string.format("%02d:%02d", hrs, min)
 
-            bat_now.perc = first_line(bstr .. "/capacity")
+            bat_now.perc = helpers.first_line(bstr .. "/capacity")
 
             if not bat_now.perc then
                 local perc = (rem / tot) * 100
 
             if not bat_now.perc then
                 local perc = (rem / tot) * 100
@@ -115,11 +118,21 @@ local function worker(args)
             else
                 bat_now.watt = "N/A"
             end
             else
                 bat_now.watt = "N/A"
             end
-
         end
 
         end
 
-        widget = bat.widget
-        settings()
+        if bat_now.status ~= helpers.get_map(battery .. "status")
+           or bat_now.perc ~= helpers.get_map(battery .. "perc")
+           or bat_now.time ~= helpers.get_map(battery .. "time")
+           or bat_now.watt ~= helpers.get_map(battery .. "watt")
+        then
+            widget = bat.widget
+            settings()
+
+            helpers.set_map(battery .. "status", bat_now.status)
+            helpers.set_map(battery .. "perc", bat_now.perc)
+            helpers.set_map(battery .. "time", bat_now.time)
+            helpers.set_map(battery .. "watt", bat_now.watt)
+        end
 
         -- notifications for low and critical states
         if bat_now.status == "Discharging" and notify == "on" and bat_now.perc ~= nil
 
         -- notifications for low and critical states
         if bat_now.status == "Discharging" and notify == "on" and bat_now.perc ~= nil
@@ -141,9 +154,9 @@ local function worker(args)
         end
     end
 
         end
     end
 
-    newtimer(battery, timeout, update)
+    helpers.newtimer(battery, timeout, update)
 
 
-    return setmetatable(bat, { __index = bat.widget })
+    return bat.widget
 end
 
 end
 
-return setmetatable({}, { __call = function(_, ...) return worker(...) end })
+return setmetatable(bat, { __call = function(_, ...) return worker(...) end })
index ec84101f6d0be1bf1ed07b8b6dfe015f4b916208..15544433b91dc9c6ad751b58589072a3ff0f823e 100644 (file)
@@ -7,16 +7,13 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local first_line   = require("lain.helpers").first_line
-local newtimer     = require("lain.helpers").newtimer
-
+local helpers      = require("lain.helpers")
 local wibox        = require("wibox")
 
 local math         = { ceil   = math.ceil }
 local string       = { format = string.format,
                        gmatch = string.gmatch }
 local tostring     = tostring
 local wibox        = require("wibox")
 
 local math         = { ceil   = math.ceil }
 local string       = { format = string.format,
                        gmatch = string.gmatch }
 local tostring     = tostring
-
 local setmetatable = setmetatable
 
 -- CPU usage
 local setmetatable = setmetatable
 
 -- CPU usage
@@ -28,16 +25,18 @@ local cpu = {
 
 local function worker(args)
     local args     = args or {}
 
 local function worker(args)
     local args     = args or {}
-    local timeout  = args.timeout or 2
+    local timeout  = args.timeout or 1
     local settings = args.settings or function() end
 
     cpu.widget = wibox.widget.textbox('')
     local settings = args.settings or function() end
 
     cpu.widget = wibox.widget.textbox('')
+    helpers.set_map("cpuactive", 0)
+    helpers.set_map("cputotal", 0)
 
     function update()
         -- Read the amount of time the CPUs have spent performing
         -- different kinds of work. Read the first line of /proc/stat
         -- which is the sum of all CPUs.
 
     function update()
         -- Read the amount of time the CPUs have spent performing
         -- different kinds of work. Read the first line of /proc/stat
         -- which is the sum of all CPUs.
-        local times = first_line("/proc/stat")
+        local times = helpers.first_line("/proc/stat")
         local at = 1
         local idle = 0
         local total = 0
         local at = 1
         local idle = 0
         local total = 0
@@ -54,22 +53,26 @@ local function worker(args)
         end
         local active = total - idle
 
         end
         local active = total - idle
 
-        -- Read current data and calculate relative values.
-        local dactive = active - cpu.last_active
-        local dtotal = total - cpu.last_total
+        if helpers.get_map("cpuactive") ~= active
+           or helpers.get_map("cputotal") ~= total
+        then
+            -- Read current data and calculate relative values.
+            local dactive = active - cpu.last_active
+            local dtotal = total - cpu.last_total
 
 
-        cpu_now = {}
-        cpu_now.usage = tostring(math.ceil((dactive / dtotal) * 100))
+            cpu_now = {}
+            cpu_now.usage = tostring(math.ceil((dactive / dtotal) * 100))
 
 
-        widget = cpu.widget
-        settings()
+            widget = cpu.widget
+            settings()
 
 
-        -- Save current data for the next run.
-        cpu.last_active = active
-        cpu.last_total = total
+            -- Save current data for the next run.
+            helpers.set_map("cpuactive", active)
+            helpers.set_map("cputotal", total)
+        end
     end
 
     end
 
-    newtimer("cpu", timeout, update)
+    helpers.newtimer("cpu", timeout, update)
 
     return cpu.widget
 end
 
     return cpu.widget
 end
index a1d5d95beaa896362f403a59f8c2b81cf7ce77c7..8b2886b23fe1cc3688cfdc32832e6452929150ae 100644 (file)
@@ -26,7 +26,8 @@ local setmetatable = setmetatable
 -- File system disk space usage
 -- lain.widgets.fs
 local fs = {}
 -- File system disk space usage
 -- lain.widgets.fs
 local fs = {}
-local fs_notification  = nil
+
+local fs_notification = nil
 
 function fs:hide()
     if fs_notification ~= nil then
 
 function fs:hide()
     if fs_notification ~= nil then
@@ -41,11 +42,11 @@ function fs:show(t_out)
     local ws = helpers.read_pipe(helpers.scripts_dir .. "dfs"):gsub("\n*$", "")
 
     if fs.followmouse then
     local ws = helpers.read_pipe(helpers.scripts_dir .. "dfs"):gsub("\n*$", "")
 
     if fs.followmouse then
-        fs.notification_preset.screen = mouse.screen
+        fs_notification_preset.screen = mouse.screen
     end
 
     fs_notification = naughty.notify({
     end
 
     fs_notification = naughty.notify({
-        preset  = fs.notification_preset,
+        preset  = fs_notification_preset,
         text    = ws,
         timeout = t_out
     })
         text    = ws,
         timeout = t_out
     })
@@ -66,6 +67,7 @@ local function worker(args)
     fs.widget = wibox.widget.textbox('')
 
     helpers.set_map(partition, false)
     fs.widget = wibox.widget.textbox('')
 
     helpers.set_map(partition, false)
+    helpers.set_map("fsused", 0)
 
     function update()
         fs_info = {}
 
     function update()
         fs_info = {}
@@ -92,8 +94,11 @@ local function worker(args)
         fs_now.size_mb   = tonumber(fs_info[partition .. " size_mb"]) or 0
         fs_now.size_gb   = tonumber(fs_info[partition .. " size_gb"]) or 0
 
         fs_now.size_mb   = tonumber(fs_info[partition .. " size_mb"]) or 0
         fs_now.size_gb   = tonumber(fs_info[partition .. " size_gb"]) or 0
 
-        widget = fs.widget
-        settings()
+        if helpers.get_map("fsused") ~= fs_now.used then
+            widget = fs.widget
+            settings()
+            helpers.set_map("fsused", fs_now.used)
+        end
 
         if fs_now.used >= 99 and not helpers.get_map(partition)
         then
 
         if fs_now.used >= 99 and not helpers.get_map(partition)
         then
index ea763dfa4127ff4baf1cdbd642b7abf61f789a1b..350e1ad3e2d1eeeff9af366192afc1a680c6aeb3 100644 (file)
@@ -65,8 +65,10 @@ local function worker(args)
             _, mailcount = string.gsub(f, "%d+", "")
             _ = nil
 
             _, mailcount = string.gsub(f, "%d+", "")
             _ = nil
 
-            widget = imap.widget
-            settings()
+            if mailcount ~= helpers.get_map(mail) then
+                widget = imap.widget
+                settings()
+            end
 
             if mailcount >= 1 and mailcount > helpers.get_map(mail)
             then
 
             if mailcount >= 1 and mailcount > helpers.get_map(mail)
             then
index eed613840921ecb955ee427489323be5db989a84..8cb821dde3633fba8120a8dce30e6a71a35f759e 100644 (file)
@@ -25,7 +25,7 @@ local setmetatable    = setmetatable
 
 -- Maildir check
 -- lain.widgets.maildir
 
 -- Maildir check
 -- lain.widgets.maildir
-local maildir = {}
+local maildir = { total = 0 }
 
 local function worker(args)
     local args         = args or {}
 
 local function worker(args)
     local args         = args or {}
@@ -65,7 +65,7 @@ local function worker(args)
             end
         until line == nil
 
             end
         until line == nil
 
-       p:close()
+        p:close()
         table.sort(boxes)
 
         newmail = "no mail"
         table.sort(boxes)
 
         newmail = "no mail"
@@ -88,8 +88,10 @@ local function worker(args)
             end
         end
 
             end
         end
 
-        widget = maildir.widget
-        settings()
+        if maildir.total ~= total then
+            widget = maildir.widget
+            settings()
+        end
     end
 
     newtimer(mailpath, timeout, update, true)
     end
 
     newtimer(mailpath, timeout, update, true)
index f6213b236fe01483002e97f63d90da812ebdb912..dc72279d800e787ea684062d9138e0c6d7c6ab1a 100644 (file)
@@ -7,27 +7,33 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer        = require("lain.helpers").newtimer
+local helpers      = require("lain.helpers")
+local wibox        = require("wibox")
 
 
-local wibox           = require("wibox")
+local io           = { lines  = io.lines }
+local math         = { floor  = math.floor }
+local string       = { gmatch = string.gmatch }
 
 
-local io              = { lines  = io.lines }
-local math            = { floor  = math.floor }
-local string          = { gmatch = string.gmatch }
+local setmetatable = setmetatable
 
 
-local setmetatable    = setmetatable
-
--- Memory usage (ignoring caches)
+-- Memory usage
 -- lain.widgets.mem
 local mem = {}
 
 local function worker(args)
     local args     = args or {}
 -- lain.widgets.mem
 local mem = {}
 
 local function worker(args)
     local args     = args or {}
-    local timeout  = args.timeout or 2
+    local timeout  = args.timeout or 1
     local settings = args.settings or function() end
 
     mem.widget = wibox.widget.textbox('')
 
     local settings = args.settings or function() end
 
     mem.widget = wibox.widget.textbox('')
 
+    helpers.set_map("mem_last_total", 0)
+    helpers.set_map("mem_last_free", 0)
+    helpers.set_map("mem_last_buf", 0)
+    helpers.set_map("mem_last_cache", 0)
+    helpers.set_map("mem_last_swap", 0)
+    helpers.set_map("mem_last_swapf", 0)
+
     function update()
         mem_now = {}
         for line in io.lines("/proc/meminfo")
     function update()
         mem_now = {}
         for line in io.lines("/proc/meminfo")
@@ -44,14 +50,29 @@ local function worker(args)
             end
         end
 
             end
         end
 
-        mem_now.used = mem_now.total - (mem_now.free + mem_now.buf + mem_now.cache)
-        mem_now.swapused = mem_now.swap - mem_now.swapf
+        if mem_now.total ~= helpers.set_map("mem_last_total")
+        or mem_now.free  ~= helpers.set_map("mem_last_free")
+        or mem_now.buf   ~= helpers.set_map("mem_last_buf")
+        or mem_now.cache ~= helpers.set_map("mem_last_cache")
+        or mem_now.swap  ~= helpers.set_map("mem_last_swap")
+        or mem_now.swapf ~= helpers.set_map("mem_last_swapf")
+        then
+            mem_now.used = mem_now.total - (mem_now.free + mem_now.buf + mem_now.cache)
+            mem_now.swapused = mem_now.swap - mem_now.swapf
 
 
-        widget = mem.widget
-        settings()
+            widget = mem.widget
+            settings()
+
+            helpers.set_map("mem_last_total", mem_now.total)
+            helpers.set_map("mem_last_free", mem_now.free)
+            helpers.set_map("mem_last_buf", mem_now.buf)
+            helpers.set_map("mem_last_cache", mem_now.cache)
+            helpers.set_map("mem_last_swap", mem_now.swap)
+            helpers.set_map("mem_last_swapf", mem_now.swapf)
+        end
     end
 
     end
 
-    newtimer("mem", timeout, update)
+    helpers.newtimer("mem", timeout, update)
 
     return mem.widget
 end
 
     return mem.widget
 end
index c437347dbc7ffa514fb8600203cfd61b6b0364ea..1d2c61737895c27c9c2d7550f3f3ad1636e6215a 100644 (file)
@@ -30,7 +30,7 @@ local mpd = {}
 
 local function worker(args)
     local args        = args or {}
 
 local function worker(args)
     local args        = args or {}
-    local timeout     = args.timeout or 2
+    local timeout     = args.timeout or 1
     local password    = args.password or ""
     local host        = args.host or "127.0.0.1"
     local port        = args.port or "6600"
     local password    = args.password or ""
     local host        = args.host or "127.0.0.1"
     local port        = args.port or "6600"
@@ -49,10 +49,11 @@ local function worker(args)
 
     mpd_notification_preset = {
         title   = "Now playing",
 
     mpd_notification_preset = {
         title   = "Now playing",
-        timeout = 6
+        timeout = 5
     }
 
     }
 
-    helpers.set_map("current mpd track", nil)
+    helpers.set_map("current mpd track", "")
+    helpers.set_map("current mpd file", "")
 
     function mpd.update()
         async.request(echo .. " | curl --connect-timeout 1 -fsm 3 " .. mpdh, function (f)
 
     function mpd.update()
         async.request(echo .. " | curl --connect-timeout 1 -fsm 3 " .. mpdh, function (f)
@@ -84,8 +85,13 @@ local function worker(args)
 
             mpd_notification_preset.text = string.format("%s (%s) - %s\n%s", mpd_now.artist,
                                            mpd_now.album, mpd_now.date, mpd_now.title)
 
             mpd_notification_preset.text = string.format("%s (%s) - %s\n%s", mpd_now.artist,
                                            mpd_now.album, mpd_now.date, mpd_now.title)
-            widget = mpd.widget
-            settings()
+
+            if mpd_now.file ~= helpers.get_map("current mpd file")
+            then
+                widget = mpd.widget
+                settings()
+                helpers.set_map("current mpd file", mpd_now.file)
+            end
 
             if mpd_now.state == "play"
             then
 
             if mpd_now.state == "play"
             then
index a578ae4ca9cc405454c4cc57a6b23cd5a9be2a0e..983da41da0655e5a45ef366833045cda12d0fc80 100644 (file)
@@ -21,10 +21,7 @@ local setmetatable = setmetatable
 
 -- Network infos
 -- lain.widgets.net
 
 -- Network infos
 -- lain.widgets.net
-local net = {
-    last_t = 0,
-    last_r = 0
-}
+local net = {}
 
 function net.get_device()
     local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9")
 
 function net.get_device()
     local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9")
@@ -38,7 +35,7 @@ end
 
 local function worker(args)
     local args = args or {}
 
 local function worker(args)
     local args = args or {}
-    local timeout = args.timeout or 2
+    local timeout = args.timeout or 1
     local units = args.units or 1024 --kb
     local notify = args.notify or "on"
     local screen = args.screen or 1
     local units = args.units or 1024 --kb
     local notify = args.notify or "on"
     local screen = args.screen or 1
@@ -49,35 +46,44 @@ local function worker(args)
     net.widget = wibox.widget.textbox('')
 
     helpers.set_map(iface, true)
     net.widget = wibox.widget.textbox('')
 
     helpers.set_map(iface, true)
+    helpers.set_map("net_t", 0)
+    helpers.set_map("net_r", 0)
 
     function update()
 
     function update()
-        net_now = {}
+        net_now = {
+            sent     = "0.0",
+            received = "0.0"
+        }
 
         if iface == "" or string.match(iface, "network off")
         then
             iface = net.get_device()
         end
 
 
         if iface == "" or string.match(iface, "network off")
         then
             iface = net.get_device()
         end
 
-        net_now.carrier = helpers.first_line('/sys/class/net/' .. iface ..
-                                           '/carrier') or "0"
-        net_now.state = helpers.first_line('/sys/class/net/' .. iface ..
-                                           '/operstate') or "down"
         local now_t = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/tx_bytes') or 0
         local now_r = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/rx_bytes') or 0
 
         local now_t = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/tx_bytes') or 0
         local now_r = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/rx_bytes') or 0
 
-        net_now.sent = (now_t - net.last_t) / timeout / units
-        net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".")
+        if now_t ~= helpers.get_map("net_t")
+           or now_r ~= helpers.get_map("net_r") then
+            net_now.carrier = helpers.first_line('/sys/class/net/' .. iface ..
+                                           '/carrier') or "0"
+            net_now.state = helpers.first_line('/sys/class/net/' .. iface ..
+                                           '/operstate') or "down"
 
 
-        net_now.received = (now_r - net.last_r) / timeout / units
-        net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".")
+            net_now.sent = (now_t - net.last_t) / timeout / units
+            net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".")
 
 
-        widget = net.widget
-        settings()
+            net_now.received = (now_r - net.last_r) / timeout / units
+            net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".")
 
 
-        net.last_t = now_t
-        net.last_r = now_r
+            widget = net.widget
+            settings()
+
+            helpers.set_map("net_t", now_t)
+            helpers.set_map("net_r", now_r)
+        end
 
         if net_now.carrier ~= "1" and notify == "on"
         then
 
         if net_now.carrier ~= "1" and notify == "on"
         then
@@ -99,7 +105,8 @@ local function worker(args)
         end
     end
 
         end
     end
 
-    helpers.newtimer(iface, timeout, update)
+    helpers.newtimer(iface, timeout, update, false)
+
     return net.widget
 end
 
     return net.widget
 end
 
index d8e4713a77371088c2ac14693b1183b97ef4517a..9472235e67d0d93d5541be48948639b76aef141a 100644 (file)
@@ -7,8 +7,7 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-
+local helpers      = require("lain.helpers")
 local wibox        = require("wibox")
 
 local io           = { open = io.open }
 local wibox        = require("wibox")
 
 local io           = { open = io.open }
@@ -22,10 +21,13 @@ local sysload = {}
 
 local function worker(args)
     local args = args or {}
 
 local function worker(args)
     local args = args or {}
-    local timeout = args.timeout or 2
+    local timeout = args.timeout or 1
     local settings = args.settings or function() end
 
     sysload.widget = wibox.widget.textbox('')
     local settings = args.settings or function() end
 
     sysload.widget = wibox.widget.textbox('')
+    helpers.set_map("load_1", 0)
+    helpers.set_map("load_5", 0)
+    helpers.set_map("load_15", 0)
 
     function update()
         local f = io.open("/proc/loadavg")
 
     function update()
         local f = io.open("/proc/loadavg")
@@ -34,11 +36,21 @@ local function worker(args)
 
         load_1, load_5, load_15 = string.match(ret, "([^%s]+) ([^%s]+) ([^%s]+)")
 
 
         load_1, load_5, load_15 = string.match(ret, "([^%s]+) ([^%s]+) ([^%s]+)")
 
-        widget = sysload.widget
-        settings()
+        if load_1 ~= helpers.get_map("load_1")
+           or load_5 ~= helpers.get_map("load_5")
+           or load_15 ~= helpers.get_map("load_15")
+        then
+            widget = sysload.widget
+            settings()
+
+            helpers.set_map("load_1", load_1)
+            helpers.set_map("load_5", load_5)
+            helpers.set_map("load_15", load_15)
+        end
     end
 
     end
 
-    newtimer("sysload", timeout, update)
+    helpers.newtimer("sysload", timeout, update)
+
     return sysload.widget
 end
 
     return sysload.widget
 end
 
index 67c94560b9a58e67fa15ef340c8862f4b473e020..6831588f3e7714d330c55dba73412331d327c233 100644 (file)
@@ -6,8 +6,7 @@
                                                   
 --]]
 
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-
+local helpers      = require("lain.helpers")
 local wibox        = require("wibox")
 
 local io           = { open = io.open }
 local wibox        = require("wibox")
 
 local io           = { open = io.open }
@@ -21,11 +20,12 @@ local temp = {}
 
 local function worker(args)
     local args     = args or {}
 
 local function worker(args)
     local args     = args or {}
-    local timeout  = args.timeout or 2
+    local timeout  = args.timeout or 1
     local tempfile = args.tempfile or "/sys/class/thermal/thermal_zone0/temp"
     local settings = args.settings or function() end
 
     temp.widget = wibox.widget.textbox('')
     local tempfile = args.tempfile or "/sys/class/thermal/thermal_zone0/temp"
     local settings = args.settings or function() end
 
     temp.widget = wibox.widget.textbox('')
+    helpers.set_map("temp_last", 0)
 
     function update()
         local f = io.open(tempfile)
 
     function update()
         local f = io.open(tempfile)
@@ -37,11 +37,15 @@ local function worker(args)
             coretemp_now = "N/A"
         end
 
             coretemp_now = "N/A"
         end
 
-        widget = temp.widget
-        settings()
+        if helpers.get_map("temp_last") ~= coretemp_now then
+            widget = temp.widget
+            settings()
+            helpers.set_map("temp_last", coretemp_now)
+        end
     end
 
     end
 
-    newtimer("coretemp", timeout, update)
+    helpers.newtimer("coretemp", timeout, update)
+
     return temp.widget
 end
 
     return temp.widget
 end
 
diff --git a/wiki b/wiki
index d7aa1a7b8428211a1c4c71865fd64302e013d62b..78879bd1208d713dcbb9216f226a34b51f886421 160000 (submodule)
--- a/wiki
+++ b/wiki
@@ -1 +1 @@
-Subproject commit d7aa1a7b8428211a1c4c71865fd64302e013d62b
+Subproject commit 78879bd1208d713dcbb9216f226a34b51f886421