
I wrote a xmobar plugin to display the time as inexact text: http://www.wabdo.com/fred/FuzzyClock.hs It uses Data.Time, not the more widespread System.Time. It's not parameter-ised because it would be a huge pain to make a xmobar plugin take a function as an argument (seems like I'd have to take it as a string and eval it), and you're going to have to modify/recompile xmobar's source to add it anyway. I was surprised at just how un-idiomatic I found xmobar's configuration to be: * Uses format strings instead of functions * Uses property lists for the arguments to monitors instead of [(a,b)] or a data constructor * Commands aren't simple functions * 'Plugins' cannot be seperated from xmobar's source (and resulting binary) Currently the only way to extend xmobar's functionality without modifying/recompiling it is to use external processes. I think that having to hack/rebuild xmobar is a huge barrier to experimentation -- I could only find one other person who had published out-of-tree plugins (http://www.haskell.org/pipermail/xmonad/2008-April/005465.html). I think it should be possible to implement things like FuzzyClock in my configuration file without modifying xmobar at all! I should be able to use functions in my configuration file to do anything a Plugin can do now -- the output text should be composed of functions producing 'IO String'. Basically I think xmobar should be more like xmonad :) Here's what a simple xmobar configuration file would look like in my ideal world (though getting rid of the separate commands list may be unrealistic because of threading+STM setup): import Xmobar import Xmobar.Monitors as Mon main = do xmobar $ Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" , bgColor = "black" , fgColor = "grey" , position = Top , format = Format { , left = myCpu ++ " | " ++ myMemory where myCpu = "Cpu: " ++ (run 10 $ Mon.cpu [(3,"green"),(50,"red")]) ++ "%" myMemory = "Mem: " ++ (run 10 Mon.memUsedRatio) ++ "%" , middle = color "#aaa" stdinReader , right = color "aquamarine" $ run 10 myHaskellFunction } } -- Fred Blasdel