From 90d86554f871b740f6d8ce913bad5066f7aabb6b Mon Sep 17 00:00:00 2001 From: Don Stewart Date: Tue, 5 Jun 2007 10:37:35 +0200 Subject: Enable logging of state changes to stdout darcs-hash:20070605083735-9c5c1-1ab5acbd611914caa7b5cdf1f2df338c0ee616f8 --- Config.hs | 7 +++++++ Config.hs-boot | 1 + Main.hs | 3 ++- Operations.hs | 6 +++--- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Config.hs b/Config.hs index fc941db..b420418 100644 --- a/Config.hs +++ b/Config.hs @@ -99,6 +99,13 @@ defaultLayouts = [ tiled , mirror tiled , full ] -- Percent of screen to increment by when resizing panes delta = 3%100 +-- +-- Enable logging of state changes to stdout. +-- The internal state of the window manager is 'shown' in Haskell data format +-- +logging :: Bool +logging = False + -- -- The key bindings list. -- diff --git a/Config.hs-boot b/Config.hs-boot index 2d66ae1..b6868aa 100644 --- a/Config.hs-boot +++ b/Config.hs-boot @@ -1,3 +1,4 @@ module Config where import Graphics.X11.Xlib.Types (Dimension) borderWidth :: Dimension +logging :: Bool diff --git a/Main.hs b/Main.hs index 8c9b485..1b2e42f 100644 --- a/Main.hs +++ b/Main.hs @@ -45,6 +45,7 @@ main = do xinesc <- getScreenInfo dpy nbc <- initcolor normalBorderColor fbc <- initcolor focusedBorderColor + hSetBuffering stdout NoBuffering args <- getArgs let winset | ("--resume" : s : _) <- args @@ -89,7 +90,7 @@ main = do , w <- W.integrate (W.stack wk) ] mapM_ manage ws -- find new windows - -- withWindowSet (io . hPrint stderr) -- uncomment for state logging + when logging $ withWindowSet (io . hPrint stdout) -- main loop, for all you HOF/recursion fans out there. forever $ handle =<< io (nextEvent dpy e >> getEvent e) diff --git a/Operations.hs b/Operations.hs index 93c0da0..734935d 100644 --- a/Operations.hs +++ b/Operations.hs @@ -15,7 +15,7 @@ module Operations where import XMonad import qualified StackSet as W -import {-# SOURCE #-} Config (borderWidth) +import {-# SOURCE #-} Config (borderWidth,logging) import Data.Maybe import Data.List (genericIndex, intersectBy, partition, delete) @@ -168,8 +168,8 @@ windows f = do io $ restackWindows d (flt ++ tiled') setTopFocus - -- withWindowSet (io . hPrint stderr) -- logging state changes! - -- io performGC -- really helps + when logging $ withWindowSet (io . hPrint stdout) + -- io performGC -- really helps, but seems to trigger GC bugs? -- We now go to some effort to compute the minimal set of windows to hide. -- The minimal set being only those windows which weren't previously hidden, -- cgit v1.2.3