aboutsummaryrefslogtreecommitdiffstats
path: root/W.hs
diff options
context:
space:
mode:
authorDon Stewart <dons@cse.unsw.edu.au>2007-03-08 13:05:36 +0100
committerDon Stewart <dons@cse.unsw.edu.au>2007-03-08 13:05:36 +0100
commit8a8dead5df44da13a447322b1c71dd37af8b1a28 (patch)
tree39a8ab61176d243a3c155f58f637aa921920842b /W.hs
parenta6bb60f40e1386251df598d3f23adb128c17bd7b (diff)
downloadxmonad-8a8dead5df44da13a447322b1c71dd37af8b1a28.tar.gz
xmonad-8a8dead5df44da13a447322b1c71dd37af8b1a28.tar.xz
xmonad-8a8dead5df44da13a447322b1c71dd37af8b1a28.zip
move W -> WMonad
darcs-hash:20070308120536-9c5c1-cd1cf451dd9a5a75f5372bdd310bb5a485bf2fec.gz
Diffstat (limited to 'W.hs')
-rw-r--r--W.hs84
1 files changed, 0 insertions, 84 deletions
diff --git a/W.hs b/W.hs
deleted file mode 100644
index 36fcd86..0000000
--- a/W.hs
+++ /dev/null
@@ -1,84 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module : W.hs
--- Copyright : (c) Spencer Janssen 2007
--- License : BSD3-style (see LICENSE)
---
--- Maintainer : sjanssen@cse.unl.edu
--- Stability : unstable
--- Portability : not portable, uses cunning newtype deriving
---
------------------------------------------------------------------------------
---
--- The W monad, a state monad transformer over IO, for the window
--- manager state, and support routines.
---
-
-module W where
-
-import StackSet
-
-import Control.Monad.State
-import System.IO
-import System.Process (runCommand)
-import Graphics.X11.Xlib (Display,Window)
-
--- | WState, the window manager state.
--- Just the display, width, height and a window list
-data WState = WState
- { display :: Display
- , screenWidth :: {-# UNPACK #-} !Int
- , screenHeight :: {-# UNPACK #-} !Int
- , workspace :: {-# UNPACK #-} !WorkSpace -- ^ workspace list
- }
-
-type WorkSpace = StackSet Window
-
--- | The W monad, a StateT transformer over IO encapuslating the window
--- manager state
-newtype W a = W { unW :: StateT WState IO a }
- deriving (Functor, Monad, MonadIO, MonadState WState)
-
--- | Run the W monad, given a chunk of W monad code, and an initial state
--- Return the result, and final state
-runW :: WState -> W a -> IO (a, WState)
-runW st a = runStateT (unW a) st
-
--- | Lift an IO action into the W monad
-io :: IO a -> W a
-io = liftIO
-
--- | Lift an IO action into the W monad, discarding any result
-io_ :: IO a -> W ()
-io_ f = liftIO f >> return ()
-
--- | Run an action forever
-forever :: (Monad m) => m a -> m b
-forever a = a >> forever a
-
--- | spawn. Launch an external application
-spawn :: String -> W ()
-spawn = io_ . runCommand
-
--- | A 'trace' for the W monad. Logs a string to stderr. The result may
--- be found in your .xsession-errors file
-trace :: String -> W ()
-trace msg = io $ do
- hPutStrLn stderr msg
- hFlush stderr
-
--- | Modify the workspace list
-modifyWorkspace :: (WorkSpace -> WorkSpace) -> W ()
-modifyWorkspace f = do
- modify $ \s -> s { workspace = f (workspace s) }
- ws <- gets workspace
- trace (show $ ws)
-
--- | Like 'when' but for (WorkSpace -> Maybe a)
-whenJust :: (WorkSpace -> Maybe a) -> (a -> W ()) -> W ()
-whenJust mg f = do
- ws <- gets workspace
- case mg ws of
- Nothing -> return ()
- Just w -> f w
-