Postagem antiga, mas para quem ainda quer uma resposta:
Basicamente, com XMonad.StackSet.index
, você pode obter a lista das janelas na área de trabalho atual assim:
do
windows <- gets (W.index . windowset)
-- something...
Então findWindow
pode ser implementado assim:
import qualified XMonad.StackSet as W
import Data.List (find)
findWindow :: (Window -> Bool) -> (Window -> X()) -> X() -> X()
findWindow condition actionIfFound actionIfNotFound = do
windows <- gets (W.index . windowset)
let found = find condition windows -- found has type Maybe Window
case found of
Nothing -> actionIfNotFound
Just w -> actionIfFound w
PS: As últimas três linhas podem ser encurtadas para maybe actionIfNotFound actionIfFound found