Simple Maildir Biff Widget (Pure Lua)

From awesome
Jump to: navigation, search

by Fredrik Ax <mailto:frax@axnet.nu>

This widget is written entirely in LUA for awesome 3.0.

It requires you to have 'find' and 'wc' in your path.

This widget uses a simple textbox widget to show the number of new and unread messages in a Maildir folder structure. It uses a timer hook to update the widget in intervals, but I might look into doing it with inotify in the next version. The update function uses find to recursively find new and "old" (lacking the Seen-flag) messages.

Everything is to be implemented in your awesome/lua.rc.

These globals are used for configuration:

-- Root for Maildir tree to be checked
mdbiffroot= "$HOME/Mail"

-- Check interval (seconds)
mdbiffint= 300


Creating the textbox, named mymdbiff:

mymdbiff = widget({ type = "textbox", name = "mymdbiff", align = "right" })

Don't forget to add it to some statusbar for it to be useful ;-)

The function to be called by the timer hook:

function hook_mdbiff ()
    local fh = io.popen("find "..mdbiffroot.." -type f -wholename '*/new/*' | wc -l")
    if fh == nil then
        mymdbiff.text = "<b>ERR</b> ("
    else 
        mymdbiff.text = "<b>"	
        for l in fh:lines() do
            mymdbiff.text = mymdbiff.text .. l
        end
        io.close(fh)
        mymdbiff.text = mymdbiff.text .. "</b>"
    end
    fh = io.popen("find "..mdbiffroot.." -type f -regex '.*/cur/.*2,[^S]*$' | wc -l")
    if fh == nil then
        mymdbiff.text = mymdbiff.text .. " (ERR)"
    else 
        mymdbiff.text = mymdbiff.text .. " ("	
        for l in fh:lines() do
            mymdbiff.text = mymdbiff.text .. l
        end
        io.close(fh)
        mymdbiff.text = mymdbiff.text .. ")"
    end
end

Run the hook function from you rc.lua file once to initialize the widget.

hook_mdbiff()

Register the timer hook:

awful.hooks.timer.register(mdbiffint, hook_mdbiff)

Add mouse click action:

mymdbiff:mouse_add(mouse({ }, 1, function () hook_mdbiff() end))


Enjoy
-- frax

Personal tools