Alte Post, aber für alle, die noch eine Antwort haben wollen:
Grundsätzlich erhalten XMonad.StackSet.index
Sie mit die Liste der Fenster im aktuellen Arbeitsbereich folgendermaßen:
do windows <- gets (W.index . windowset) -- something...
So findWindow
lässt sich so implementieren:
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: Die letzten drei Zeilen könnten verkürzt werden maybe actionIfNotFound actionIfFound found