Improve cpu widget

This commit is contained in:
streetturtle 2020-02-07 07:54:03 -05:00
parent 8839e853df
commit 326d11e95b
1 changed files with 81 additions and 37 deletions

View File

@ -39,14 +39,44 @@ local function worker(args)
{ widget = wibox.widget.textbox }, { widget = wibox.widget.textbox },
spacing = 4, spacing = 4,
layout = wibox.layout.fixed.vertical, layout = wibox.layout.fixed.vertical,
}
local is_update = true
local process_rows = {
--{ widget = wibox.widget.textbox },
spacing = 8,
layout = wibox.layout.fixed.vertical,
} }
local process_rows = { local process_header = {
{ widget = wibox.widget.textbox }, --{
spacing = 4, {
layout = wibox.layout.fixed.vertical, markup = '<b>PID</b>',
forced_width = 40,
widget = wibox.widget.textbox
},
{
markup = '<b>Name</b>',
forced_width = 40,
widget = wibox.widget.textbox
},
{
{
markup = '<b>%CPU</b>',
forced_width = 40,
widget = wibox.widget.textbox
},
{
markup = '<b>%MEM</b>',
forced_width = 40,
widget = wibox.widget.textbox
},
layout = wibox.layout.fixed.horizontal
},
layout = wibox.layout.align.horizontal
--},
--widget = wibox.container.background
} }
local popup = awful.popup{ local popup = awful.popup{
@ -59,6 +89,8 @@ local function worker(args)
offset = { y = 5 }, offset = { y = 5 },
widget = {} widget = {}
} }
popup:connect_signal("mouse::enter", function(c) is_update = false end)
popup:connect_signal("mouse::leave", function(c) is_update = true end)
cpugraph_widget:buttons( cpugraph_widget:buttons(
awful.util.table.join( awful.util.table.join(
@ -82,7 +114,7 @@ local function worker(args)
end end
local cpus = {} local cpus = {}
watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head"]], 1, watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo pid=,comm=,%cpu=,%mem=,cmd= --sort=-%cpu | head"]], 1,
function(widget, stdout) function(widget, stdout)
local i = 1 local i = 1
local j = 1 local j = 1
@ -141,56 +173,67 @@ local function worker(args)
cpu_rows[i] = row cpu_rows[i] = row
i = i + 1 i = i + 1
else else
local pid, cmd, cpu, mem = line:match('(%d+)%s+(%w+)%s+([%d.]+)%s+([%d.]+)') if is_update == true then
if pid == nil then local pid, comm, cpu, mem, cmd = line:match('(%d+)%s+(%w+)%s+([%d.]+)%s+([%d.]+)%s+(.+)')
pid = 'PID' cmd = string.sub(cmd,0, 300)
cmd = 'Name' cmd = cmd .. '...'
cpu = '%CPU' if pid == nil then
mem = '%MEM' pid = 'PID'
comm = 'Name'
cpu = '%CPU'
mem = '%MEM'
end end
local row = wibox.widget {
local row = wibox.widget {
{
{
text = pid,
forced_width = 40,
widget = wibox.widget.textbox
},
{
text = cmd,
forced_width = 40,
widget = wibox.widget.textbox
},
{ {
{ {
text = cpu, text = pid,
forced_width = 40, forced_width = 40,
widget = wibox.widget.textbox widget = wibox.widget.textbox
}, },
{ {
text = mem, text = comm,
forced_width = 40, forced_width = 40,
widget = wibox.widget.textbox widget = wibox.widget.textbox
}, },
{
{
text = cpu,
forced_width = 40,
widget = wibox.widget.textbox
},
{
text = mem,
forced_width = 40,
widget = wibox.widget.textbox
},
layout = wibox.layout.align.horizontal
},
layout = wibox.layout.align.horizontal layout = wibox.layout.align.horizontal
}, },
layout = wibox.layout.align.horizontal widget = wibox.container.background
}, }
widget = wibox.container.background
}
row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end) row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end)
row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end) row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end)
awful.tooltip {
objects = { row },
mode = 'outside',
preferred_positions = {'bottom'},
timer_function = function()
return cmd:gsub('%s', '\n\t')
end,
}
process_rows[j] = row process_rows[j] = row
j = j + 1
end
j = j + 1
end end
end end
popup:setup { popup:setup {
{ {
@ -201,6 +244,7 @@ local function worker(args)
color = beautiful.bg_focus, color = beautiful.bg_focus,
widget = wibox.widget.separator widget = wibox.widget.separator
}, },
process_header,
process_rows, process_rows,
layout = wibox.layout.fixed.vertical, layout = wibox.layout.fixed.vertical,
}, },