Osservando i pacchetti contrib di XMonad , troverai XMonad.Actions.WindowGo
che 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.WindowGo
pagina ).
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.Map
di 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 Full
layout dopo la chiamata runOrRaiseMaster
, come descritto qui :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(si noti che questo esempio dimostra anche come XMonad.Util.EZConfig
consentire 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? )