use pipe(|) to split columns of the ps command + code cleanup
This commit is contained in:
parent
2a06d64a51
commit
249ac4d688
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue