Tornando as janelas de tela cheia não lado a lado no xmonad + KDE

1

Eu entendo que preciso adicionar algo como:

composeOne [ isFullscreen -?> doFullFloat ]

para o meu ManageHook. Pelo menos de acordo com esta página.

Mas não tenho certeza de onde adicioná-lo na minha configuração xmonad. Meu conhecimento sobre o Haskell é relativamente pequeno e, como estou usando o xmonad com o KDE, o arquivo de configuração não tem uma aparência muito normal.

Meu xmonad.hs é assim:

import XMonad
import XMonad.Config.Kde
import qualified XMonad.StackSet as W -- to shift and float windows
import XMonad.Hooks.ManageHelpers

main = xmonad $ kdeConfig

 { modMask = mod4Mask -- use the Windows button as mod
 , manageHook = manageHook kdeConfig <+> myManageHook
 }
 where
   myManageHook = composeAll . concat $
     [ [ className   =? c --> doFloat           | c <- myFloats]
     , [ title       =? t --> doFloat           | t <- myOtherFloats]
     , [ className   =? c --> doF (W.shift "3") | c <- webApps]
     , [ className   =? c --> doF (W.shift "4") | c <- ircApps]
     ]
   myFloats      = ["MPlayer", "Gimp", "Skype", "Plasma-desktop", "VirtualBox"]
   myOtherFloats = ["alsamixer"]
   webApps       = ["Firefox-bin", "Opera"] -- open on desktop 3
   ircApps       = ["Ksirc"]                -- open on desktop 4

Sempre que eu tento colocá-lo, eu só recebo mensagens de erro enigmáticas, das quais o Haskell é famoso.

    
por Rene Saarsoo 17.02.2010 / 22:46

1 resposta

1

Você não pode conectá-lo diretamente porque os tipos não correspondem:

ghci> :t isFullscreen -?> doFullFloat
isFullscreen -?> doFullFloat :: MaybeManageHook
ghci> :t composeAll
composeAll :: [ManageHook] -> ManageHook

Note, no entanto

ghci> :t composeOne 
composeOne :: [MaybeManageHook] -> ManageHook

Isso leva uma lista de gerenciar os ganchos que podem ou não ser executados e combiná-los em uma única ação.

MaybeManageHook também se encaixa bem com

*Main> :t maybeToDefinite 
maybeToDefinite :: MaybeManageHook -> ManageHook

Adicione

, [ maybeToDefinite (isFullscreen -?> doFullFloat) ]

ou

, [ composeOne [ isFullscreen -?> doFullFloat ] ]

para a definição de myManageHook .

    
por 23.02.2010 / 20:08