Patrząc na pakiety contrib XMonada , znajdziesz XMonad.Actions.WindowGo
, który eksportuje następującą funkcję :
runOrRaiseMaster :: String -> Query Bool -> X ()
który pobiera argument ciągu programu do uruchomienia , np. „firefox”; oraz zapytanie boolowskie, które służy do sprawdzenia, czy jest już uruchomione , za pośrednictwem właściwości X11, np. (className =? "Firefox")
(patrz warianty na górze XMonad.Actions.WindowGo
strony ).
Wszystko, czego potrzebujesz, to powiązanie runOrRaiseMaster "firefox" (className =? "Firefox")
z kluczem, który chcesz, jak wyjaśniono wXMonad.Doc.Extending
, za pośrednictwem
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
jako część powiązań klawiszy Data.Map
w konfiguracji (szczegóły różnią się w zależności od sposobu konfiguracji, tj. całość xmonad.hs
, patrz Dodawanie skrótów klawiszowych ).
Zauważ, że nie ma sensu maksymalizować okna w XMonad. Po skonfigurowaniu rzeczy zgodnie z objaśnieniem będziesz Mod4+ fdziałał w następujący sposób:
- jeśli jest okno z nazwą klasy pasującą do „Firefox”, zostanie ono skoncentrowane i ustawione jako master , tj., w zależności od twojego ostatniego układu , będzie dużym oknem
- jeśli okno nie pasuje, Firefox zostanie odrodzony i ustawiony na master .
Maksymalizację można emulować, wybierając Full
układ po wywołaniu runOrRaiseMaster
, jak opisano tutaj :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(zwróć uwagę, że w tym przykładzie pokazano również XMonad.Util.EZConfig
łatwiejsze definicje skrótów klawiszowych)
Możliwe jest także połączenie tych dwóch rzeczy. Oba są typu X ()
, tj. Są w X Monadzie . Korzystanie >>
, który jest typu (sprawdź :t (>>)
w ghci
)
(>>) :: Monad m => m a -> m b -> m b
mamy (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
też kombinację dwóch X ()
typów typów X ()
, dzięki czemu można go przypisać do klucza.
EDYCJA Brakuje )
w wierszu kodu za pomocą>>
Edycja2 modm
-> modMask
.
Edit3 To xmonad.hs
miejmy nadzieję działa.
( Dlaczego nie nauczyć się Haskella dla wielkiego dobra? )