local colors = {
header = theme.fg_widget_clock,
count = theme.fg_widget_label,
index = theme.fg_widget_label,
name = theme.fg_widget_value_important,
}
local function client_info(c)
local v = ""
-- object
local c = c or client.focus
v = v .. tostring(c)
-- geometry
local cc = c:geometry()
local signx = (cc.x > 0 and "+") or ""
local signy = (cc.y > 0 and "+") or ""
v = v .. " @ " .. cc.width .. 'x' .. cc.height .. signx .. cc.x .. signy .. cc.y .. "\n\n"
local inf = {
"name", "icon_name", "type", "class", "role", "instance", "pid",
"skip_taskbar", "id", "group_window", "leader_id", "machine",
"screen", "hidden", "minimized", "size_hints_honor", "titlebar", "urgent",
"focus", "opacity", "ontop", "above", "below", "fullscreen", "transient_for",
"maximixed_horizontal", "maximixed_vertical", "sticky", "modal", "focusable"
}
for i = 1, #inf do
v = v .. string.format('%2s: %-20s = %s\n',
i,
beautiful.fg_widget_label, inf[i],
beautiful.fg_widget_value, tostring(c[inf[i]]))
end
naughty.notify{ text = string.format('%s', v:sub(1,#v-1)),
timeout = 0, margin = 10, screen = c.screen }
end
local function dbg_get(var, depth, indent)
local a = ""
local text = ""
local name = ""
local vtype = type(var)
local vstring = tostring(var)
if vtype == "table" or vtype == "userdata" then
if vtype == "userdata" then var = getmetatable(var) end
-- element count and longest key
local count = 0
local longest_key = 3
for k,v in pairs(var) do
count = count + 1
longest_key = math.max(#tostring(k), longest_key)
end
text = text .. vstring .. " #" .. count .. ""
-- descend a table
if depth > 0 then
-- sort keys FIXME: messes up sorting number
local sorted = {}
for k, v in pairs(var) do table.insert(sorted, { k, v }) end
table.sort(sorted, function(a, b) return tostring(a[1]) < tostring(b[1]) end)
-- go through elements
for _, p in ipairs(sorted) do
local key = p[1]; local value = p[2]
-- don't descend _M
local d; if key ~= "_M" then d = depth - 1 else d = 0 end
-- get content and add to output
local content = dbg_get(value, d, indent + longest_key + 1)
text = text .. '\n' .. string.rep(" ", indent) ..
string.format("%-"..longest_key.."s %s",
tostring(key), content)
end
end
else
if vtype == "tag" or vtype == "client" then
name = " [" .. (var.name or '…'):sub(1,10) .. "]"
end
text = text .. vstring .. name or ""
end
return text
end
function dbg(...)
local num = table.maxn(arg)
local text = "dbg #"..num..""
local depth = 2
local clients = 0
for i = 1, num do
local desc = dbg_get(arg[i], depth, 3)
text = text .. string.format("\n%2d %s", i, desc)
if type(arg[i]) == "client" then
client_info(arg[i])
clients = clients + 1
end
end
-- Display only if we don't have only clients to be displayed
if clients ~= num then
naughty.notify{ text = text, timeout = 0, hover_timeout = 2, screen = screen.count() }
end
end