Решил написать простой виджет для осома для показа топа процессов с помощью скрипта на баше, так как с lua не сталкивался до этого, писал по примеру со виджетов base/abase, fs из lain, но при попытке забиндить на показ по нажатию вываливается с ошибкой attempt to call field 'show' (a nil value), но не совсем понимаю в чем ошибка конкретно в коде, буду благодарен, если кто-нибудь поможет разобраться
local helpers = require("lain.helpers")
local beautiful = require("beautiful")
local wibox = require("wibox")
local naughty = require("naughty")
local io = { popen = io.popen }
local pairs = pairs
local string = { match = string.match,
format = string.format }
local tonumber = tonumber
local setmetatable = setmetatable
-- Basic template for custom widgets
-- lain.widgets.top
local top = {}
local notification = nil
top_notification_preset = { fg = beautiful.fg_normal }
function top:hide()
if notification ~= nil then
naughty.destroy(notification)
notification = nil
end
end
function top:show(t_out)
top:hide()
local f = io.popen("ps -eo pcpu,pid,user,args | sort -k 1 | awk -v name=\"$USER\" '{if($3==name && $1>=1) print $1,$4;}'")
output = f:read("*a"):gsub("\n*$", "")
f:close()
notification = naughty.notify({
preset = top_notification_preset,
text = output,
timeout = t_out,
})
end
local function worker( args )
local top = {}
local args = args or {}
local cmd = args.cmd or "ps -eo pcpu,pid,user,args | sort -k 1 | awk -v name=\"$USER\" '{if($3==name && $1>=1) print $1,$4;}'"
top.widget = wibox.widget.textbox('')
local f = io.popen(cmd)
output = f:read("*a"):gsub("\n*$", "")
f:close()
widget=top.widget
return setmetatable(top, { __index = top.widget })
end
return setmetatable({}, { __call = function(_, ...) return worker(...) end })
awful.key({ altkey, }, "t", function () lain.widgets.top.show(5) end),
awesome v3.5.6 (For Those About To Rock)
• Build: Jan 10 2015 23:18:34 for x86_64 by gcc version 4.9.2 (builduser@)
• Compiled against Lua 5.2.3 (running with Lua 5.2)
• D-Bus support: ✔