module Internal.Logger where import XMonad import qualified XMonad.Util.ExtensibleState as XS import System.IO data LoggerState = LoggerState { logHandle :: Maybe Handle } instance Read LoggerState where readsPrec i s = map (\(_, s) -> (LoggerState Nothing, s)) (readsPrec i s :: [((), String)]) instance Show LoggerState where show _ = show () instance ExtensionClass LoggerState where initialValue = LoggerState Nothing logs :: String -> X () logs s = do LoggerState handle' <- XS.get handle <- case handle' of Nothing -> do handle <- io $ openFile "/tmp/xmonad.log" AppendMode XS.put $ LoggerState (Just handle) return handle Just h -> return h io $ do hPutStrLn handle s hFlush handle