2012-05-25 6 views
7

Ich möchte meine Programme auf dem Bildschirm spawnen, der im Fokus war, wenn seine Tastenkombination gedrückt wurde, nicht auf dem Bildschirm, der gerade fokussiert ist.XMonad: SpawnOn-Arbeitsbereich, der Fokus hatte, als Spawn-Taste gedrückt wurde

Warum: Mein derzeitiges Setup ist Arch Linux + XMonad und ich habe es auf 6 Monitore laufen. Ich benutze XMonad jetzt seit ungefähr einem Jahr und mein einziges Problem damit ist für Programme, die eine Weile brauchen, um zu öffnen. Zum Beispiel das allererste Mal, wenn ich Chrom starte, dauert es 3 Sekunden, um zu laden. Ich drücke meine Tastenkombination für Chrom und gehe dann zu einem anderen Bildschirm, um etwas anderes zu tun. Aber wenn chrome geladen wird, wird es auf den Bildschirm geladen, der momentan nicht auf dem Bildschirm fokussiert ist, der zu der Zeit fokussiert war, als die Spawn-Key-Bindung gedrückt wurde.

Meine Haskell Fähigkeiten sind gut ... nicht existent. Ich habe vorher in Lisp programmiert und verbringe viel Zeit in C, Python und JavaScript, also bin ich mir sicher, dass ich es bei Bedarf aufnehmen kann (also bitte klarstellen, wenn es um Haskell-Beispiele in Antworten geht).

Vielen Dank im Voraus.

Antwort

7

Ich fand die Antwort auf meine eigene Frage.

Zuerst müssen Sie Ihre Importe hinzu:

import XMonad.Actions.SpawnOn 

dann unter Ihrer Hauptfunktion haben so etwas wie:

main = do 
xmonad $ defaultConfig 
    {  
     manageHook = myManageHooks <+> manageSpawn <+> manageDocks <+> manageHook defaultConfig 
     , startupHook = myStartupHook 
     , ETC..... 

Der Schlüssel hier war die Zugabe des manageSpawn in der manageHook Linie.

Dann ersetzen Sie spawn s mit spawnHere:

, ((modMask, xK_w), spawn "chromium") 

Becomes:

, ((modMask, xK_w), spawnHere "chromium")