diff --git a/ram-widget/ram-widget.lua b/ram-widget/ram-widget.lua index 3072068..a5414c8 100644 --- a/ram-widget/ram-widget.lua +++ b/ram-widget/ram-widget.lua @@ -2,77 +2,89 @@ local awful = require("awful") local watch = require("awful.widget.watch") local wibox = require("wibox") ---- Main ram widget shown on wibar -local ramgraph_widget = wibox.widget { - border_width = 0, - colors = { - '#74aeab', '#26403f' - }, - display_labels = false, - forced_width = 25, - widget = wibox.widget.piechart -} +local ramgraph_widget = {} ---- Widget which is shown when user clicks on the ram widget -local w = wibox { - height = 200, - width = 400, - ontop = true, - expand = true, - bg = '#1e252c', - max_widget_size = 500 -} +local function worker(args) -w:setup { - border_width = 0, - colors = { - '#5ea19d', - '#55918e', - '#4b817e', - }, - display_labels = false, - forced_width = 25, - id = 'pie', - widget = wibox.widget.piechart -} + local args = args or {} -local total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap + --- Main ram widget shown on wibar + ramgraph_widget = wibox.widget { + border_width = 0, + colors = { + '#74aeab', '#26403f' + }, + display_labels = false, + forced_width = 25, + widget = wibox.widget.piechart + } -local function getPercentage(value) - return math.floor(value / (total+total_swap) * 100 + 0.5) .. '%' + --- Widget which is shown when user clicks on the ram widget + local w = wibox { + height = 200, + width = 400, + ontop = true, + expand = true, + bg = '#1e252c', + max_widget_size = 500 + } + + w:setup { + border_width = 0, + colors = { + '#5ea19d', + '#55918e', + '#4b817e', + }, + display_labels = false, + forced_width = 25, + id = 'pie', + widget = wibox.widget.piechart + } + + local total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap + + local function getPercentage(value) + return math.floor(value / (total+total_swap) * 100 + 0.5) .. '%' + end + + watch('bash -c "free | grep -z Mem.*Swap.*"', 1, + function(widget, stdout, stderr, exitreason, exitcode) + total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap = + stdout:match('(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*Swap:%s*(%d+)%s*(%d+)%s*(%d+)') + + widget.data = { used, total-used } widget.data = { used, total-used } + + if w.visible then + w.pie.data_list = { + {'used ' .. getPercentage(used + used_swap), used + used_swap}, + {'free ' .. getPercentage(free + free_swap), free + free_swap}, + {'buff_cache ' .. getPercentage(buff_cache), buff_cache} + } + end + end, + ramgraph_widget + ) + + ramgraph_widget:buttons( + awful.util.table.join( + awful.button({}, 1, function() + awful.placement.top_right(w, { margins = {top = 25, right = 10}, parent = awful.screen.focused() }) + w.pie.data_list = { + {'used ' .. getPercentage(used + used_swap), used + used_swap}, + {'free ' .. getPercentage(free + free_swap), free + free_swap}, + {'buff_cache ' .. getPercentage(buff_cache), buff_cache} + } + w.pie.display_labels = true + w.visible = not w.visible + end) + ) + ) + + + return ramgraph_widget end -watch('bash -c "free | grep -z Mem.*Swap.*"', 1, - function(widget, stdout, stderr, exitreason, exitcode) - total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap = - stdout:match('(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*Swap:%s*(%d+)%s*(%d+)%s*(%d+)') - - widget.data = { used, total-used } widget.data = { used, total-used } - - if w.visible then - w.pie.data_list = { - {'used ' .. getPercentage(used + used_swap), used + used_swap}, - {'free ' .. getPercentage(free + free_swap), free + free_swap}, - {'buff_cache ' .. getPercentage(buff_cache), buff_cache} - } - end - end, - ramgraph_widget -) - -ramgraph_widget:buttons( - awful.util.table.join( - awful.button({}, 1, function() - awful.placement.top_right(w, { margins = {top = 25, right = 10}, parent = awful.screen.focused() }) - w.pie.data_list = { - {'used ' .. getPercentage(used + used_swap), used + used_swap}, - {'free ' .. getPercentage(free + free_swap), free + free_swap}, - {'buff_cache ' .. getPercentage(buff_cache), buff_cache} - } - w.pie.display_labels = true - w.visible = not w.visible - end) - ) -) - -return ramgraph_widget +return setmetatable(ramgraph_widget, { __call = function(_, ...) + return worker(...) +end })