| |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
Description | |||||||||||||||||||||||||||||||||||||||||
A collection of simple logger functions and formatting utilities which can be used in the ppExtras field of a pretty-printing status logger format. See XMonad.Hooks.DynamicLog for more information. | |||||||||||||||||||||||||||||||||||||||||
Synopsis | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
Usage | |||||||||||||||||||||||||||||||||||||||||
Use this module by importing it into your ~/.xmonad/xmonad.hs: import XMonad.Util.Loggers Then, add one or more loggers to the ppExtras field of your XMonad.Hooks.DynamicLoc.PP, possibly with extra formatting . For example: -- display load averages and a pithy quote along with xmonad status. , logHook = dynamicLogWithPP $ defaultPP { ppExtras = [ padL loadAvg, logCmd "fortune -n 40 -s" ] } -- gives something like " 3.27 3.52 3.26 Drive defensively. Buy a tank." See the formatting section below for another example using a where block to define some formatted loggers for a top-level myLogHook. Loggers are named either for their function, as in battery, aumixVolume, and maildirNew, or are prefixed with "log" when making use of other functions or by analogy with the pp* functions. For example, the logger version of ppTitle is logTitle, and logFileCount loggerizes the result of file counting code. Formatting utility names are generally as short as possible and carry the suffix "L". For example, the logger version of shorten is shortenL. Of course, there is nothing really special about these so-called "loggers": they are just X (Maybe String) actions. So you can use them anywhere you would use an X (Maybe String), not just with DynamicLog. Additional loggers welcome! | |||||||||||||||||||||||||||||||||||||||||
type Logger = X (Maybe String) | |||||||||||||||||||||||||||||||||||||||||
Logger is just a convenient synonym for X (Maybe String). | |||||||||||||||||||||||||||||||||||||||||
System Loggers | |||||||||||||||||||||||||||||||||||||||||
aumixVolume :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the current volume with aumix. http://jpj.net/~trevor/aumix.html | |||||||||||||||||||||||||||||||||||||||||
battery :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the battery status (percent charge and charging/discharging status). This is an ugly hack and may not work for some people. At some point it would be nice to make this more general/have fewer dependencies (assumes /usr/bin/acpi and sed are installed.) | |||||||||||||||||||||||||||||||||||||||||
date :: String -> Logger | |||||||||||||||||||||||||||||||||||||||||
Get the current date and time, and format them via the given format string. The format used is the same as that used by the C library function strftime; for example, date "%a %b %d" might display something like Tue Feb 19. For more information see something like http://www.cplusplus.com/reference/clibrary/ctime/strftime.html. | |||||||||||||||||||||||||||||||||||||||||
loadAvg :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the load average. This assumes that you have a utility called /usr/bin/uptime and that you have sed installed; these are fairly common on GNU/Linux systems but it would be nice to make this more general. | |||||||||||||||||||||||||||||||||||||||||
maildirNew :: FilePath -> Logger | |||||||||||||||||||||||||||||||||||||||||
Get a count of new mails in a maildir. | |||||||||||||||||||||||||||||||||||||||||
maildirUnread :: FilePath -> Logger | |||||||||||||||||||||||||||||||||||||||||
Get a count of unread mails in a maildir. For maildir format details, to write loggers for other classes of mail, see http://cr.yp.to/proto/maildir.html and logFileCount. | |||||||||||||||||||||||||||||||||||||||||
logCmd :: String -> Logger | |||||||||||||||||||||||||||||||||||||||||
Create a Logger from an arbitrary shell command. | |||||||||||||||||||||||||||||||||||||||||
logFileCount | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
XMonad Loggers | |||||||||||||||||||||||||||||||||||||||||
A very small sample of what you can log since you have access to X. For example you can loggerize the number of windows on each workspace, or titles on other workspaces, or the id of the previously focused workspace.... | |||||||||||||||||||||||||||||||||||||||||
logCurrent :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the name of the current workspace. | |||||||||||||||||||||||||||||||||||||||||
logLayout :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the name of the current layout. | |||||||||||||||||||||||||||||||||||||||||
logTitle :: Logger | |||||||||||||||||||||||||||||||||||||||||
Get the title (name) of the focused window. | |||||||||||||||||||||||||||||||||||||||||
Formatting Utilities | |||||||||||||||||||||||||||||||||||||||||
Combine logger formatting functions to make your ppExtras more colorful and readable. (For convenience this module exports <$> to use instead of '.' or '$' in hard to read formatting lines. For example: myLogHook = dynamicLogWithPP defaultPP { -- skipped , ppExtras = [lLoad, lTitle, logSp 3, wrapL "[" "]" $ date "%a %d %b"] , ppOrder = \(ws,l,_,xs) -> [l,ws] ++ xs } where -- lTitle = fixedWidthL AlignCenter "." 99 . dzenColorL "cornsilk3" "" . padL . shortenL 80 $ logTitle -- or something like: lTitle = fixedWidthL AlignCenter "." 99 <$> dzenColorL "cornsilk3" "" <$> padL . shortenL 80 $ logTitle lLoad = dzenColorL "#6A5ACD" "" . wrapL loadIcon " " . padL $ loadAvg loadIcon = " ^i(/home/me/.dzen/icons/load.xbm)" Note: When applying shortenL or fixedWidthL to logger strings containing colors or other formatting commands, apply the formatting after the length adjustment, or include "invisible" characters in the length specification, e.g. in the above '^fg(cornsilk3)' and '^fg()' yields 19 invisible and 80 visible characters. | |||||||||||||||||||||||||||||||||||||||||
onLogger :: (String -> String) -> Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Use a string formatting function to edit a Logger string. For example, to create a tag function to prefix or label loggers, as in 'tag: output', use: tagL l = onLogger $ wrap (l ++ ": ") "" tagL "bat" battery tagL "load" loadAvg If you already have a (String -> String) function you want to apply to a logger: revL = onLogger trim See formatting utility source code for more onLogger usage examples. | |||||||||||||||||||||||||||||||||||||||||
wrapL :: String -> String -> Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Wrap a logger's output in delimiters, unless it is X (Nothing) or X (Just ""). Some examples: wrapL " | " " | " (date "%a %d %b") -- ' | Tue 19 Feb | ' wrapL "bat: " "" battery -- ' bat: battery_logger_output' | |||||||||||||||||||||||||||||||||||||||||
fixedWidthL | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
logSp :: Int -> Logger | |||||||||||||||||||||||||||||||||||||||||
Create a "spacer" logger, e.g. logSp 3 -- loggerizes ' '. For more complex "spacers", use fixedWidthL with return Nothing. | |||||||||||||||||||||||||||||||||||||||||
padL :: Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Pad a logger's output with a leading and trailing space, unless it is X (Nothing) or X (Just ""). | |||||||||||||||||||||||||||||||||||||||||
shortenL :: Int -> Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Limit a logger's length, adding "..." if truncated. | |||||||||||||||||||||||||||||||||||||||||
dzenColorL :: String -> String -> Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Color a logger's output with dzen foreground and background colors. dzenColorL "green" "#2A4C3F" battery | |||||||||||||||||||||||||||||||||||||||||
xmobarColorL :: String -> String -> Logger -> Logger | |||||||||||||||||||||||||||||||||||||||||
Color a logger's output with xmobar foreground and background colors. xmobarColorL "#6A5ACD" "gray6" loadAverage | |||||||||||||||||||||||||||||||||||||||||
<$> | |||||||||||||||||||||||||||||||||||||||||
Produced by Haddock version 2.5.0 |