Osservando i pacchetti contrib di XMonad , troverai XMonad.Actions.WindowGoche esporta la seguente funzione :
runOrRaiseMaster :: String -> Query Bool -> X ()
che richiede l' esecuzione di un argomento stringa del programma , ad esempio "firefox"; e una query booleana che viene utilizzata per scoprire se è già in esecuzione , tramite le proprietà X11, ad esempio (className =? "Firefox")(vedere le varianti della parte superiore della XMonad.Actions.WindowGopagina ).
Quindi, tutto ciò che serve è legare runOrRaiseMaster "firefox" (className =? "Firefox")alla chiave desiderata, come spiegato inXMonad.Doc.Extending , tramite
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
come parte delle combinazioni Data.Mapdi tasti della tua configurazione (i dettagli differiscono dal modo in cui le impostazioni sono impostate, ovvero da tutto il tuo xmonad.hs, vedi Aggiunta di associazioni di tasti ).
Nota che non ha alcun senso nel massimizzare una finestra in XMonad. Quando imposti le cose come spiegato, avrai Mod4+ fagire come segue:
- se c'è una finestra con un nome di classe corrispondente a "Firefox", verrà focalizzata e impostata su master , ovvero, a seconda del layout recente , sarà la finestra grande
- se nessuna finestra corrisponde, Firefox verrà generato e impostato su master .
L'ottimizzazione può essere emulata scegliendo il Fulllayout dopo la chiamata runOrRaiseMaster, come descritto qui :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(si noti che questo esempio dimostra anche come XMonad.Util.EZConfigconsentire definizioni di legatura dei tasti più semplici)
È anche possibile combinare queste due cose. Entrambi sono di tipo X (), cioè, sono in X Monade . Utilizzo >>di tipo (verificare con :t (>>)in ghci)
(>>) :: Monad m => m a -> m b -> m b
abbiamo (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")anche una combinazione di due X ()tipi di tipo X ()e può quindi essere associato a una chiave.
EDIT mancante )nella riga di codice con>>
Modifica2 modm -> modMask.
Edit3 Questo si spera funzioni .xmonad.hs
( Perché non imparare un Haskell per l'ottimo bene? )