summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpu-widget/cpu-widget.lua117
1 files changed, 99 insertions, 18 deletions
diff --git a/cpu-widget/cpu-widget.lua b/cpu-widget/cpu-widget.lua
index 0e027dd..e5762f9 100644
--- a/cpu-widget/cpu-widget.lua
+++ b/cpu-widget/cpu-widget.lua
@@ -5,12 +5,14 @@
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/cpu-widget
-- @author Pavel Makhov
--- @copyright 2019 Pavel Makhov
+-- @copyright 2020 Pavel Makhov
-------------------------------------------------
+local awful = require("awful")
local watch = require("awful.widget.watch")
local wibox = require("wibox")
local beautiful = require("beautiful")
+local gears = require("gears")
local widget = {}
@@ -33,33 +35,112 @@ local function worker(args)
color = "linear:0,0:0,20:0,#FF0000:0.3,#FFFF00:0.6," .. color
}
- --- By default graph widget goes from left to right, so we mirror it and push up a bit
- local cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2)
-
- local total_prev = 0
- local idle_prev = 0
+ local rows = {
+ { widget = wibox.widget.textbox },
+ spacing = 4,
+ layout = wibox.layout.fixed.vertical,
- watch([[bash -c "cat /proc/stat | grep '^cpu '"]], 1,
- function(widget, stdout)
- local user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice =
- stdout:match('(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s')
+ }
- local total = user + nice + system + idle + iowait + irq + softirq + steal
+ local popup = awful.popup{
+ ontop = true,
+ visible = false,
+ shape = gears.shape.rounded_rect,
+ border_width = 1,
+ border_color = beautiful.bg_normal,
+ maximum_width = 300,
+ offset = { y = 5 },
+ widget = {}
+ }
- local diff_idle = idle - idle_prev
- local diff_total = total - total_prev
- local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
+ cpugraph_widget:buttons(
+ awful.util.table.join(
+ awful.button({}, 1, function()
+ if popup.visible then
+ --rows = nil
+ popup.visible = not popup.visible
+ else
+ --init_popup()
+ popup:move_next_to(mouse.current_widget_geometry)
+ end
+ end)
+ )
+ )
- widget:add_value(diff_usage)
+ --- By default graph widget goes from left to right, so we mirror it and push up a bit
+ local cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2)
- total_prev = total
- idle_prev = idle
+ local cpus = {}
+ watch([[bash -c "cat /proc/stat | grep '^cpu.'"]], 1,
+ function(widget, stdout)
+ local i = 1
+ for cur in stdout:gmatch("[^\r\n]+") do
+ if cpus[i] == nil then cpus[i] = {} end
+
+ local name, user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice =
+ cur:match('(%w+)%s+(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)')
+
+ local total = user + nice + system + idle + iowait + irq + softirq + steal
+
+ local diff_idle = idle - tonumber(cpus[i]['idle_prev'] == nil and 0 or cpus[i]['idle_prev'])
+ local diff_total = total - tonumber(cpus[i]['total_prev'] == nil and 0 or cpus[i]['total_prev'])
+ local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
+
+ cpus[i]['total_prev'] = total
+ cpus[i]['idle_prev'] = idle
+
+ if i == 1 then
+ widget:add_value(diff_usage)
+ end
+
+ local row = wibox.widget
+ {
+ {
+ text = name,
+ forced_width = 40,
+ widget = wibox.widget.textbox
+ },
+ {
+ text = string.format('%i%%', diff_usage),
+ forced_width = 40,
+ widget = wibox.widget.textbox
+ },
+ {
+ max_value = 100,
+ value = diff_usage,
+ forced_height = 20,
+ forced_width = 150,
+ paddings = 1,
+ margins = 4,
+ border_width = 1,
+ border_color = beautiful.bg_focus,
+ background_color = beautiful.bg_normal,
+ bar_border_width = 1,
+ bar_border_color = beautiful.bg_focus,
+ color = beautiful.bg_focus,
+ widget = wibox.widget.progressbar,
+
+ },
+ layout = wibox.layout.align.horizontal
+ }
+
+ rows[i] = row
+
+ i = i + 1
+ end
+ popup:setup {
+ {
+ rows,
+ layout = wibox.layout.align.vertical,
+ },
+ margins = 8,
+ widget = wibox.container.margin
+ }
end,
cpugraph_widget
)
return cpu_widget
-
end
return setmetatable(widget, { __call = function(_, ...)