X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/af3427c7dfcf991c56a099ac1450e54db867ae51..ee84995734048a20e920badafb305c15556c3e6c:/widget/fs.lua?ds=sidebyside diff --git a/widget/fs.lua b/widget/fs.lua index 5e18491..58fbf93 100644 --- a/widget/fs.lua +++ b/widget/fs.lua @@ -13,8 +13,9 @@ local focused = require("awful.screen").focused local wibox = require("wibox") local naughty = require("naughty") local math = math -local sformat = string.format +local string = string local tconcat = table.concat +local type = type local tonumber = tonumber local query_size = Gio.FILE_ATTRIBUTE_FILESYSTEM_SIZE local query_free = Gio.FILE_ATTRIBUTE_FILESYSTEM_FREE @@ -45,13 +46,14 @@ local function factory(args) fs.notification_preset.screen = fs.followtag and focused() or scr or 1 fs.notification = naughty.notify { preset = fs.notification_preset, - timeout = seconds or 5 + timeout = type(seconds) == "number" and seconds or 5 } end local args = args or {} local timeout = args.timeout or 600 local partition = args.partition + local threshold = args.threshold or 99 local showpopup = args.showpopup or "on" local settings = args.settings or function() end @@ -67,33 +69,42 @@ local function factory(args) end function fs.update() - local notifytable = { [1] = sformat("%-10s %-5s %s\t%s\t\n", "fs", "used", "free", "size") } + local notifytable = { [1] = string.format("%-10s %4s\t%6s\t%6s\t\n", "path", "used", "free", "size") } + local pathlen = 10 + local maxpathidx = 1 fs_now = {} for _, mount in ipairs(Gio.unix_mounts_get()) do local path = Gio.unix_mount_get_mount_path(mount) local root = Gio.File.new_for_path(path) local info = root:query_filesystem_info(query) - local size = info:get_attribute_uint64(query_size) - local used = info:get_attribute_uint64(query_used) - local free = info:get_attribute_uint64(query_free) - - if size > 0 then - local units = math.floor(math.log(size)/math.log(1024)) - - fs_now[path] = { - units = fs.units[units], - percentage = math.floor(100 * used / size), -- used percentage - size = size / math.pow(1024, math.floor(units)), - used = used / math.pow(1024, math.floor(units)), - free = free / math.pow(1024, math.floor(units)) - } - -- don't notify unused file systems - if fs_now[path].percentage > 0 then - notifytable[#notifytable+1] = sformat("\n%-10s %-5s %3.2f\t%3.2f\t%s", path, - fs_now[path].percentage .. "%", fs_now[path].free, fs_now[path].size, - fs_now[path].units) + if info then + local size = info:get_attribute_uint64(query_size) + local used = info:get_attribute_uint64(query_used) + local free = info:get_attribute_uint64(query_free) + + if size > 0 then + local units = math.floor(math.log(size)/math.log(1024)) + + fs_now[path] = { + units = fs.units[units], + percentage = math.floor(100 * used / size), -- used percentage + size = size / math.pow(1024, math.floor(units)), + used = used / math.pow(1024, math.floor(units)), + free = free / math.pow(1024, math.floor(units)) + } + + if fs_now[path].percentage > 0 then -- don't notify unused file systems + notifytable[#notifytable+1] = string.format("\n%-10s %3s%%\t%6.2f\t%6.2f\t%s", path, + math.floor(fs_now[path].percentage), fs_now[path].free, fs_now[path].size, + fs_now[path].units) + + if #path > pathlen then + pathlen = #path + maxpathidx = #notifytable + end + end end end end @@ -101,12 +112,12 @@ local function factory(args) widget = fs.widget settings() - if partition and fs_now[partition] and fs_now[partition].used >= 99 then + if partition and fs_now[partition] and fs_now[partition].percentage >= threshold then if not helpers.get_map(partition) then naughty.notify { preset = naughty.config.presets.critical, title = "Warning", - text = partition .. " is full", + text = string.format("%s is above %d%% (%d%%)", partition, threshold, fs_now[partition].percentage) } helpers.set_map(partition, true) else @@ -114,6 +125,16 @@ local function factory(args) end end + if pathlen > 10 then -- if are there paths longer than 10 chars, reformat first column accordingly + local pathspaces + for i = 1, #notifytable do + pathspaces = notifytable[i]:match("[ ]+") + if i ~= maxpathidx and pathspaces then + notifytable[i] = notifytable[i]:gsub(pathspaces, pathspaces .. string.rep(" ", pathlen - 10)) + end + end + end + fs.notification_preset.text = tconcat(notifytable) end