Baktığımızda xmonad en contrib paketleri , bulacağınız XMonad.Actions.WindowGoihraç eden, aşağıdaki işlevi :
runOrRaiseMaster :: String -> Query Bool -> X ()
çalıştırılacak programın dize argümanını alır , örneğin "firefox"; ve X11 özellikleri aracılığıyla zaten çalışıp çalışmadığını bulmak için kullanılan bir boole sorgusu , ör. (className =? "Firefox")( varyantlar için XMonad.Actions.WindowGosayfanın üst kısmına bakın ).
Yani, ihtiyacınız olan tek runOrRaiseMaster "firefox" (className =? "Firefox")şey, açıklandığı gibiXMonad.Doc.Extending , istediğiniz anahtara bağlamaktır .
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
Data.Mapyapılandırmanızın temel bağlarının bir parçası olarak (ayrıntılar, ayar yönteminize göre farklılık gösterir, yani tüm bunlarxmonad.hs , bkz . Anahtar Bağlama Ekleme ).
Not hiçbir gerçek anlamda olmadığı bir pencere maksimize xmonad içinde. İşleri açıklandığı gibi ayarladığınızda, aşağıdaki gibi Mod4+ fharekete geçersiniz:
- Bir sınıfadı eşleştirmesi "Firefox" ile bir pencere varsa, o odaklanmış olacak ve usta olarak ayarlanmış , yani en son bağlı düzen olacak büyük pencere
- Hiçbir pencere eşleşirse, Firefox edilecektir kökenli ve usta olarak ayarlanmış .
Seçerek taklit edilebilir maksimize Fullçağrı sonrası düzeni runOrRaiseMaster, burada anlatıldığı gibi :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(bu örnekte XMonad.Util.EZConfigdaha kolay tuş bağlama tanımlarına izin verildiğini de unutmayın )
Bu iki şeyi birleştirmek de mümkündür. Her ikisi de tiptedir X (), yani X Monad'ındadır . >>Türü olan kullanma ( :t (>>)giriş yapma ghci)
(>>) :: Monad m => m a -> m b -> m b
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")iki X ()tür türün bir kombinasyonu olarak da var X ()ve bu nedenle bir anahtara bağlanabilir.
EDIT )ile kod satırında eksik>>
Düzenle2 modm -> modMask.
Edit3 Bu xmonad.hsumarım çalışır.
( Neden sana iyi bir Haskell öğrenmiyorsun? )