Naughtyを使ったrc.luaのデバッグ

~/.config/awesome/rc.luaを書き換えた後に期待通り動かないときに、原因を探るのにはNaughtyを使って変数の値を調べるのが便利。

下記のリンク先を参考にデバッグ用のスクリプトを書いてみた。

http://awesome.naquadah.org/wiki/Naughty

rc.luaに以下のような関数を定義する

function dbg(msg, var)
    local text = "<b>" .. msg .. "</b><br/>"
    text = text .. "type: " .. type(var) .. "<br/>"
    if var ~= nil then
        if type(var) == "string" or type(var) == "number" or type(var) == "nil" then 
            text = text .. "value: " .. var 
        elseif type(var) == "table" then
            text = text .. "value:<br/> "
            for k, v in pairs(var) do
                text = text .. "  " .. tostring(k)  .. " | " .. tostring(v) .. "<br/>"
            end 
        else
            text = text .. "value: " .. tostring(var) .. "<br/>" 
        end 
    end 
    naughty.notify({ text = text, timeout = 0}) 
end

この関数を適当なキーバインドからよび出せるようにしておくと、値が知りたい関数の名前を入力するだけなので楽。

    awful.key({ modkey, "Shift" }, "x",
              function ()
                  awful.prompt.run({ prompt = "variable name: " },
                  mypromptbox[mouse.screen].widget,
                  function (var) awful.util.eval("dbg('" .. var .. "'," .. var .. ")") end)
              end),

typeがtableでない時に属性を取得できれば、もっと便利になるのだがやり方がわからなかった。例えば、変数の型がtagの時にnameを表示してくれたりすると、コードを調べたりリファレンスを調べる手間が省けるのでありがたい。

あと変数名が長くなってくると毎回入力するのが面倒なので履歴を使えるようにしたい。