debug: let dbg() be the universal thing to debug.

Therefore, we can use it directly on client objects. In this case, we
get full details.
This commit is contained in:
Vincent Bernat 2012-07-15 17:10:40 +02:00
parent 8e531b9ca1
commit edfc26accf
5 changed files with 111 additions and 102 deletions

View file

@ -1,6 +1,3 @@
require("awesome")
require("naughty")
-- Handle runtime errors after startup
do
local in_error = false
@ -15,68 +12,3 @@ do
in_error = false
end)
end
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 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 .. " <span color='"..colors.count.."'>#" .. count .. "</span>"
-- 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("<span color='"..colors.index.."'>%-"..longest_key.."s</span> %s",
tostring(key), content)
end
end
else
if vtype == "tag" or vtype == "client" then
name = " [<span color='"..colors.name.."'>" .. var.name:sub(1,10) .. "</span>]"
end
text = text .. vstring .. name or ""
end
return text
end
function dbg(...)
local num = table.maxn(arg)
local text = "<span color='"..colors.header.."'>dbg</span> <span color='"..colors.count.."'>#"..num.."</span>"
local depth = 2
for i = 1, num do
local desc = dbg_get(arg[i], depth, 3)
text = text .. string.format("\n<span color='"..colors.index.."'>%2d</span> %s", i, desc)
end
naughty.notify{ text = text, timeout = 0, hover_timeout = 0.05, screen = screen.count() }
end