From 0250299134b41abcaa4696b333b3d7ae329b05b6 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Sat, 14 Jul 2012 12:24:47 +0200 Subject: [PATCH] errors: add some debugging functions --- rc/errors.lua | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/rc/errors.lua b/rc/errors.lua index d460495..8da80ff 100644 --- a/rc/errors.lua +++ b/rc/errors.lua @@ -15,3 +15,68 @@ do in_error = false end) end + +local colors = { + header = "#FF004D", + count = "#33FF33", + index = "#708090", + name = "#8F8870", +} + +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: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 + + for i = 1, num do + local desc = dbg_get(arg[i], depth, 3) + text = text .. string.format("\n%2d %s", i, desc) + end + + naughty.notify{ text = text, timeout = 0, hover_timeout = 0.05, screen = screen.count() } +end