module Rahm.Desktop.Logger where import XMonad import qualified XMonad.Util.ExtensibleState as XS import System.IO import Rahm.Desktop.NoPersist newtype LoggerState = LoggerState { logHandle :: Maybe (NoPersist Handle) } 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 $ NoPersist handle return handle Just (NoPersist h) -> return h io $ do hPutStrLn handle s hFlush handle