myDynamicLogString :: PP -> X String
myDynamicLogString pp = do
  winset <- gets windowset
  urgents <- readUrgents
  sort' <- ppSort pp
  style <- XS.get :: X WarpViewStyle

  -- layout description
  let ld = description . W.layout . W.workspace . W.current $ winset

  -- workspace list
  let ws = pprWindowSet sort' urgents pp winset
  -- let ws = show ((ppSort pp) $ map W.tag $ W.hidden $ winset)
  -- let ws = show (W.allWindows winset)
  -- let ws = show $ map length $ map W.tag $ W.hidden $ winset
  -- let ws = show $ map (\x -> ((length . W.integrate' . W.stack) x, W.tag x) :: (Int,String)) $ sortBy getWsCompareByTag $ (W.workspaces winset)

  -- window title
  wt <- maybe (return "") (fmap show . getName) . W.peek $ winset

  -- run extra loggers, ignoring any that generate errors.
  extras <- mapM (flip catchX (return Nothing)) $ ppExtras pp

  -- Description of current `warpView` style
  let warpStyle = statusNormalColor $ show style

  return $ encodeString . sepBy (ppSep pp) . ppOrder pp $
         [ ws
         , warpStyle
         , ppLayout pp ld
         , ppTitle  pp wt
         ]
         ++ catMaybes extras
myDynamicLogString :: PP -> X String
myDynamicLogString pp = do
  winset <- gets windowset
  urgents <- readUrgents
  sort' <- ppSort pp
  style <- XS.get :: X WarpViewStyle

  -- layout description
  let ld = description . W.layout . W.workspace . W.current $ winset

  -- workspace list
  let ws = pprWindowSet sort' urgents pp winset
  -- let ws = show ((ppSort pp) $ map W.tag $ W.hidden $ winset)
  -- let ws = show (W.allWindows winset)
  -- let ws = show $ map length $ map W.tag $ W.hidden $ winset
  -- let ws = show $ map (\x -> ((length . W.integrate' . W.stack) x, W.tag x) :: (Int,String)) $ sortBy getWsCompareByTag $ (W.workspaces winset)

  -- window title
  wt <- maybe (return "") (fmap show . getName) . W.peek $ winset

  -- run extra loggers, ignoring any that generate errors.
  extras <- mapM (flip catchX (return Nothing)) $ ppExtras pp

  -- Description of current `warpView` style
  let warpStyle = statusNormalColor $ show style

  return $ encodeString . sepBy (ppSep pp) . ppOrder pp $
         [ ws
         , warpStyle
         , ppLayout pp ld
         , ppTitle  pp wt
         ]
         ++ catMaybes extras
myDynamicLogString pp = do
  winset <- gets windowset
  urgents <- readUrgents
  sort' <- ppSort pp
  style <- XS.get :: X WarpViewStyle

  -- layout description
  let ld = description . W.layout . W.workspace . W.current $ winset

  -- workspace list
  let ws = pprWindowSet sort' urgents pp winset
  -- let ws = show ((ppSort pp) $ map W.tag $ W.hidden $ winset)
  -- let ws = show (W.allWindows winset)
  -- let ws = show $ map length $ map W.tag $ W.hidden $ winset
  -- let ws = show $ map (\x -> ((length . W.integrate' . W.stack) x, W.tag x) :: (Int,String)) $ sortBy getWsCompareByTag $ (W.workspaces winset)

  -- window title
  wt <- maybe (return "") (fmap show . getName) . W.peek $ winset

  -- run extra loggers, ignoring any that generate errors.
  extras <- mapM (flip catchX (return Nothing)) $ ppExtras pp

  -- Description of current `warpView` style
  let warpStyle = statusNormalColor $ show style

  return $ encodeString . sepBy (ppSep pp) . ppOrder pp $
         [ ws
         , warpStyle
         , ppLayout pp ld
         , ppTitle  pp wt
         ]
         ++ catMaybes extras