Baktığımızda xmonad en contrib paketleri , bulacağınız XMonad.Actions.WindowGo
ihraç 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.WindowGo
sayfanı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.Map
yapı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.EZConfig
daha 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.hs
umarım çalışır.
( Neden sana iyi bir Haskell öğrenmiyorsun? )