Старый пост, но для тех, кто все еще хочет ответа:
По сути, с помощью XMonad.StackSet.index
, вы можете получить список окон в текущей рабочей области следующим образом:
do windows <- gets (W.index . windowset) -- something...
Так findWindow
может быть реализовано так:
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: последние три строки могут быть сокращены в maybe actionIfNotFound actionIfFound found