123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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(user_args)
- local args = user_args or {}
- local timeout = args.timeout or 1
- local color_used = args.color_used or beautiful.bg_urgent
- local color_free = args.color_free or beautiful.fg_normal
- local color_buf = args.color_buf or beautiful.border_color_active
- local widget_show_buf = args.widget_show_buf or false
- local widget_height = args.widget_height or 25
- local widget_width = args.widget_width or 25
- --- Main ram widget shown on wibar
- ramgraph_widget = wibox.widget {
- border_width = 0,
- colors = {
- color_used,
- color_free,
- color_buf,
- },
- display_labels = false,
- forced_height = widget_height,
- forced_width = widget_width,
- widget = wibox.widget.piechart
- }
- --- Widget which is shown when user clicks on the ram widget
- local popup = awful.popup{
- ontop = true,
- visible = false,
- widget = {
- widget = wibox.widget.piechart,
- forced_height = 200,
- forced_width = 400,
- colors = {
- color_used,
- color_free,
- color_buf, -- 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)
- return math.floor(value / (total+total_swap) * 100 + 0.5) .. '%'
- end
- watch('bash -c "LANGUAGE=en_US.UTF-8 free | grep -z Mem.*Swap.*"', timeout,
- 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+)')
- if widget_show_buf then
- widget.data = { used, free, buff_cache }
- else
- widget.data = { used, total-used }
- end
- 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,
- ramgraph_widget
- )
- ramgraph_widget:buttons(
- awful.util.table.join(
- 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}
- }
- 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 })
|