X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/7af06fff37b5da6ff625e7c1f39306fe7cc04a91..87b323bd06e0d7e4f6e4eca3dee9990d3662b7c5:/widgets/fs.lua?ds=inline

diff --git a/widgets/fs.lua b/widgets/fs.lua
index 951f0cc..f578f8b 100644
--- a/widgets/fs.lua
+++ b/widgets/fs.lua
@@ -11,6 +11,7 @@
 local helpers      = require("lain.helpers")
 
 local beautiful    = require("beautiful")
+local focused      = require("awful.screen").focused
 local wibox        = require("wibox")
 local naughty      = require("naughty")
 
@@ -25,28 +26,31 @@ local setmetatable = setmetatable
 -- File system disk space usage
 -- lain.widgets.fs
 local fs = {}
+local fs_notification  = nil
 
-local notification  = nil
-fs_notification_preset = { fg = beautiful.fg_normal }
-
-function fs:hide()
-    if notification ~= nil then
-        naughty.destroy(notification)
-        notification = nil
+function fs.hide()
+    if fs_notification ~= nil then
+        naughty.destroy(fs_notification)
+        fs_notification = nil
     end
 end
 
-function fs:show(t_out)
-    fs:hide()
+function fs.show(seconds, scr)
+    fs.hide()
+
+    local cmd = (fs.options and string.format("dfs %s", fs.options)) or "dfs"
+    local ws = helpers.read_pipe(helpers.scripts_dir .. cmd):gsub("\n*$", "")
 
-    local f = io.popen(helpers.scripts_dir .. "dfs")
-    ws = f:read("*a"):gsub("\n*$", "")
-    f:close()
+    if fs.followtag then
+        fs.notification_preset.screen = focused()
+    elseif scr then
+        fs.notification_preset.screen = scr
+    end
 
-    notification = naughty.notify({
-        preset = fs_notification_preset,
-        text = ws,
-        timeout = t_out,
+    fs_notification = naughty.notify({
+        preset  = fs.notification_preset,
+        text    = ws,
+        timeout = seconds or 5
     })
 end
 
@@ -54,10 +58,16 @@ 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 showpopup        = args.showpopup or "on"
+    local notify           = args.notify or "on"
+    local settings         = args.settings or function() end
+
+    fs.options             = args.options
+    fs.followtag           = args.followtag or false
+    fs.notification_preset = args.notification_preset or { fg = beautiful.fg_normal }
 
     fs.widget = wibox.widget.textbox('')
 
@@ -76,6 +86,8 @@ local function worker(args)
             if u and m then -- Handle 1st line and broken regexp
                 fs_info[m .. " size_mb"]  = string.format("%.1f", tonumber(s) / unit["mb"])
                 fs_info[m .. " size_gb"]  = string.format("%.1f", tonumber(s) / unit["gb"])
+                fs_info[m .. " used_mb"]  = string.format("%.1f", tonumber(u) / unit["mb"])
+                fs_info[m .. " used_gb"]  = string.format("%.1f", tonumber(u) / unit["gb"])
                 fs_info[m .. " used_p"]   = tonumber(p)
                 fs_info[m .. " avail_p"]  = 100 - tonumber(p)
             end
@@ -83,15 +95,18 @@ local function worker(args)
 
         f:close()
 
-        fs_now.used      = tonumber(fs_info[partition .. " used_p"])  or 0
         fs_now.available = tonumber(fs_info[partition .. " avail_p"]) 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
+        fs_now.used      = tonumber(fs_info[partition .. " used_p"])  or 0
+        fs_now.used_mb   = tonumber(fs_info[partition .. " used_mb"]) or 0
+        fs_now.used_gb   = tonumber(fs_info[partition .. " used_gb"]) or 0
 
+        notification_preset = fs.notification_preset
         widget = fs.widget
         settings()
 
-        if fs_now.used >= 99 and not helpers.get_map(partition)
+        if notify == "on" and fs_now.used >= 99 and not helpers.get_map(partition)
         then
             naughty.notify({
                 title = "warning",
@@ -106,8 +121,10 @@ local function worker(args)
         end
     end
 
-    fs.widget:connect_signal('mouse::enter', function () fs:show(0) end)
-    fs.widget:connect_signal('mouse::leave', function () fs:hide() end)
+    if showpopup == "on" then
+       fs.widget:connect_signal('mouse::enter', function () fs.show(0) end)
+       fs.widget:connect_signal('mouse::leave', function () fs.hide() end)
+    end
 
     helpers.newtimer(partition, timeout, update)