Encontre uma janela na área de trabalho atual e aplique alguma ação nela

4

Eu acho que isso deve ser realmente fácil para alguém que é bom em Haskell, mas eu não consigo entender como sou ruim nisso. Basicamente eu quero pesquisar através da lista de janelas na área de trabalho atual, encontrar uma correspondência de alguma condição e aplicar alguma ação a ela; se não for encontrado, crie esta janela. Eu tinha um código de esqueleto como este

import qualified XMonad.StackSet as W
import XMonad.Actions.WindowGo

findWindow condition actionIfFound actionIfNotFound = 
    ifWindow (condition <&&> member W.current) windowFound actionIfNotFound
        where windowFound = ask >>= w -> do actionIfFound w
    
por yulan6248 17.05.2013 / 13:47

1 resposta

7

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

    
por 13.12.2014 / 15:17

Tags