diff options
Diffstat (limited to 'ram-widget/ram-widget.lua')
-rw-r--r-- | ram-widget/ram-widget.lua | 77 |
1 files changed, 41 insertions, 36 deletions
diff --git a/ram-widget/ram-widget.lua b/ram-widget/ram-widget.lua index 55b6fd7..49a7d3b 100644 --- a/ram-widget/ram-widget.lua +++ b/ram-widget/ram-widget.lua @@ -1,19 +1,23 @@ local awful = require("awful") +local beautiful = require("beautiful") +local gears = require("gears") local watch = require("awful.widget.watch") local wibox = require("wibox") + local ramgraph_widget = {} -local function worker(args) - local args = args or {} +local function worker(user_args) + local args = user_args or {} local timeout = args.timeout or 1 --- Main ram widget shown on wibar ramgraph_widget = wibox.widget { border_width = 0, colors = { - '#74aeab', '#26403f' + beautiful.bg_urgent, -- used + beautiful.fg_normal -- free }, display_labels = false, forced_width = 25, @@ -21,28 +25,26 @@ local function worker(args) } --- 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 popup = awful.popup{ + ontop = true, + visible = false, + widget = { + widget = wibox.widget.piechart, + forced_height = 200, + forced_width = 400, + colors = { + beautiful.bg_urgent, -- used + beautiful.fg_normal, -- free + beautiful.border_color_active, -- buf_cache + }, + }, + shape = gears.shape.rounded_rect, + border_color = beautiful.border_color_active, + border_width = 1, + offset = { y = 5 }, } + --luacheck:ignore 231 local total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap local function getPercentage(value) @@ -50,17 +52,17 @@ local function worker(args) end watch('bash -c "LANGUAGE=en_US.UTF-8 free | grep -z Mem.*Swap.*"', timeout, - function(widget, stdout, stderr, exitreason, exitcode) + function(widget, stdout) 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 } + 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} + if popup.visible then + popup:get_widget().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, @@ -69,23 +71,26 @@ local function worker(args) 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 = { + awful.button({}, 1, function() + popup:get_widget().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 + + if popup.visible then + popup.visible = not popup.visible + else + popup:move_next_to(mouse.current_widget_geometry) + end end) ) ) - return ramgraph_widget end + return setmetatable(ramgraph_widget, { __call = function(_, ...) return worker(...) end }) |