Olhando para os pacotes contrib do XMonad , você encontrará XMonad.Actions.WindowGo, que exporta a seguinte função :
runOrRaiseMaster :: String -> Query Bool -> X ()
que utiliza um argumento de string do programa para executar , por exemplo, "firefox"; e uma consulta booleana que é usada para descobrir se já está sendo executada , através das propriedades do X11, por exemplo (className =? "Firefox")(consulte o topo da XMonad.Actions.WindowGopágina para variantes).
Portanto, tudo que você precisa é vincular runOrRaiseMaster "firefox" (className =? "Firefox")à chave desejada, conforme explicado emXMonad.Doc.Extending , via
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
como parte das combinações Data.Mapde teclas da sua configuração (os detalhes diferem com a maneira como você define as configurações, ou seja, com toda a sua configuração xmonad.hs, consulte Adicionando combinações de teclas ).
Observe que não há sentido real em maximizar uma janela no XMonad. Ao configurar as coisas conforme explicado, você terá Mod4+ a fseguinte ação:
- se houver uma janela com um nome de classe correspondente ao "Firefox", ela será focada e definida como master , ou seja, dependendo do layout recente , será a grande janela
- se nenhuma janela corresponder, o Firefox será gerado e definido como master .
A maximização pode ser emulada escolhendo o Fulllayout após a chamada runOrRaiseMaster, conforme descrito aqui :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(observe que este exemplo também demonstra XMonad.Util.EZConfigpermitir definições mais fáceis de vinculação de teclas)
Combinar essas duas coisas também é possível. Ambos são do tipo X (), ou seja, estão na X Mônada . Usando >>, que é do tipo (verifique com :t (>>)em ghci)
(>>) :: Monad m => m a -> m b -> m b
também temos (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")uma combinação de dois X ()tipos de tipos X ()e, portanto, pode ser vinculado a uma chave.
EDIT ausente )na linha de código com>>
Editar2 modm -> modMask.
Edit3 Esta xmonad.hsespero funciona.
( Por que não aprender um Haskell para o bem? )