X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/6e43bfa5128be39efe554678f8a0670b6c0038a6..6f7dae29dc64fb5adc5677d24eaba90ea54510f9:/widgets/fs.lua

diff --git a/widgets/fs.lua b/widgets/fs.lua
index 8127c28..a1d5d95 100644
--- a/widgets/fs.lua
+++ b/widgets/fs.lua
@@ -14,8 +14,9 @@ local beautiful    = require("beautiful")
 local wibox        = require("wibox")
 local naughty      = require("naughty")
 
-local io           = io
+local io           = { popen  = io.popen }
 local pairs        = pairs
+local mouse        = mouse
 local string       = { match  = string.match,
                        format = string.format }
 local tonumber     = tonumber
@@ -25,29 +26,28 @@ local setmetatable = setmetatable
 -- File system disk space usage
 -- lain.widgets.fs
 local fs = {}
-
-local notification  = nil
-fs_notification_preset = { fg = beautiful.fg_normal }
+local fs_notification  = nil
 
 function fs:hide()
-    if notification ~= nil then
-        naughty.destroy(notification)
-        notification = nil
+    if fs_notification ~= nil then
+        naughty.destroy(fs_notification)
+        fs_notification = nil
     end
 end
 
 function fs:show(t_out)
     fs:hide()
 
-    local f = io.popen(helpers.scripts_dir .. "dfs")
-    ws = f:read("*a"):gsub("\n*$", "")
-    f:close()
+    local ws = helpers.read_pipe(helpers.scripts_dir .. "dfs"):gsub("\n*$", "")
+
+    if fs.followmouse then
+        fs.notification_preset.screen = mouse.screen
+    end
 
-    notification = naughty.notify({
-        preset = fs_notification_preset,
-        text = ws,
-        timeout = t_out,
-        screen = client.focus and client.focus.screen or 1
+    fs_notification = naughty.notify({
+        preset  = fs.notification_preset,
+        text    = ws,
+        timeout = t_out
     })
 end
 
@@ -55,19 +55,22 @@ end
 local unit = { ["mb"] = 1024, ["gb"] = 1024^2 }
 
 local function worker(args)
-    local args      = args or {}
-    local timeout   = args.timeout or 600
-    local partition = args.partition or "/"
-    local settings  = args.settings or function() end
+    local args             = args or {}
+    local timeout          = args.timeout or 600
+    local partition        = args.partition or "/"
+    local settings         = args.settings or function() end
+
+    fs.followmouse         = args.followmouse or false
+    fs.notification_preset = args.notification_preset or { fg = beautiful.fg_normal }
 
     fs.widget = wibox.widget.textbox('')
 
-    helpers.set_map("fs", false)
+    helpers.set_map(partition, false)
 
     function update()
         fs_info = {}
         fs_now  = {}
-        local f = io.popen("LC_ALL=C df -kP " .. partition)
+        local f = assert(io.popen("LC_ALL=C df -kP"))
 
         for line in f:lines() do -- Match: (size) (used)(avail)(use%) (mount)
             local s     = string.match(line, "^.-[%s]([%d]+)")
@@ -92,7 +95,7 @@ local function worker(args)
         widget = fs.widget
         settings()
 
-        if fs_now.used >= 99 and not helpers.get_map("fs")
+        if fs_now.used >= 99 and not helpers.get_map(partition)
         then
             naughty.notify({
                 title = "warning",
@@ -100,18 +103,17 @@ local function worker(args)
                 timeout = 8,
                 fg = "#000000",
                 bg = "#FFFFFF",
-                screen = client.focus and client.focus.screen or 1
             })
-            helpers.set_map("fs", true)
+            helpers.set_map(partition, true)
         else
-            helpers.set_map("fs", false)
+            helpers.set_map(partition, false)
         end
     end
 
-    helpers.newtimer(partition, timeout, update)
+    fs.widget:connect_signal('mouse::enter', function () fs:show(0) end)
+    fs.widget:connect_signal('mouse::leave', function () fs:hide() end)
 
-    widget:connect_signal('mouse::enter', function () fs:show(0) end)
-    widget:connect_signal('mouse::leave', function () fs:hide() end)
+    helpers.newtimer(partition, timeout, update)
 
     return setmetatable(fs, { __index = fs.widget })
 end