use pipe(|) to split columns of the ps command + code cleanup

This commit is contained in:
streetturtle 2020-02-16 13:54:45 -05:00
parent 2a06d64a51
commit 249ac4d688
1 changed files with 44 additions and 38 deletions

View File

@ -16,6 +16,21 @@ local gears = require("gears")
local widget = {} local widget = {}
local function split(string_to_split, separator)
if separator == nil then separator = "%s" end
local t={}
for str in string.gmatch(string_to_split, "([^".. separator .."]+)") do
table.insert(t, str)
end
return t
end
local function starts_with(str, start)
return str:sub(1, #start) == start
end
local function worker(args) local function worker(args)
local args = args or {} local args = args or {}
@ -36,21 +51,17 @@ local function worker(args)
} }
local cpu_rows = { local cpu_rows = {
{ widget = wibox.widget.textbox },
spacing = 4, spacing = 4,
layout = wibox.layout.fixed.vertical, layout = wibox.layout.fixed.vertical,
} }
local is_update = true local is_update = true
local process_rows = { local process_rows = {
--{ widget = wibox.widget.textbox },
spacing = 8, spacing = 8,
layout = wibox.layout.fixed.vertical, layout = wibox.layout.fixed.vertical,
} }
local process_header = { local process_header = {
--{
{ {
markup = '<b>PID</b>', markup = '<b>PID</b>',
forced_width = 40, forced_width = 40,
@ -75,8 +86,6 @@ local function worker(args)
layout = wibox.layout.fixed.horizontal layout = wibox.layout.fixed.horizontal
}, },
layout = wibox.layout.align.horizontal layout = wibox.layout.align.horizontal
--},
--widget = wibox.container.background
} }
local popup = awful.popup{ local popup = awful.popup{
@ -89,6 +98,7 @@ 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::enter", function(c) is_update = false end)
popup:connect_signal("mouse::leave", function(c) is_update = true end) popup:connect_signal("mouse::leave", function(c) is_update = true end)
@ -109,12 +119,8 @@ local function worker(args)
--- By default graph widget goes from left to right, so we mirror it and push up a bit --- 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 cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2)
local function starts_with(str, start)
return str:sub(1, #start) == start
end
local cpus = {} local cpus = {}
watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo pid=,comm=,%cpu=,%mem=,cmd= --sort=-%cpu | head"]], 1, watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo '%p|%c|%C|' -o "%mem" -o '|%a' --sort=-%cpu | head -11 | tail -n +2"]], 1,
function(widget, stdout) function(widget, stdout)
local i = 1 local i = 1
local j = 1 local j = 1
@ -175,16 +181,13 @@ local function worker(args)
else else
if is_update == true then if is_update == true then
local pid, comm, cpu, mem, cmd = line:match('(%d+)%s+(%w+)%s+([%d.]+)%s+([%d.]+)%s+(.+)') local columns = split(line, '|')
cmd = string.sub(cmd,0, 300)
cmd = cmd .. '...'
if pid == nil then
pid = 'PID'
comm = 'Name'
cpu = '%CPU'
mem = '%MEM'
end local pid = columns[1]
local comm = columns[2]
local cpu = columns[3]
local mem = columns[4]
local cmd = columns[5]
local row = wibox.widget { local row = wibox.widget {
{ {
@ -216,6 +219,7 @@ local function worker(args)
widget = wibox.container.background widget = wibox.container.background
} }
-- Do not update process rows when mouse cursor is over the widget
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)
@ -224,7 +228,9 @@ local function worker(args)
mode = 'outside', mode = 'outside',
preferred_positions = {'bottom'}, preferred_positions = {'bottom'},
timer_function = function() timer_function = function()
return cmd:gsub('%s', '\n\t') return cmd
:gsub('%s%-', '\n\t-') -- put arguments on a new line
:gsub(':/', '\n\t\t:/') -- java classpath uses : to separate jars
end, end,
} }