2015-08-06 19 views
5

Ich versuche, das Äquivalent vonwechseln Programmatically auf die Anwendung in XMonad

xdotool search "Chromium" windowactivate --sync key --clearmodifiers ctrl+r 

das heißt ich tun möchte, um Chrom wechseln und die aktuelle Seite neu zu laden. jedoch mit XMonad bekomme ich folgende Fehlermeldung:

Your windowmanager claims not to support _NET_ACTIVE_WINDOW, so the attempt to activate the window was aborted. 

Gibt es eine Möglichkeit in XMonad programmatisch zu einer bestimmten Anwendung zu wechseln?

Antwort

0

Hier ist was ich verwende, inspiriert von XMonad.Util.WindowBringer. Sie müssen das Text.PCRE-Paket installieren. Entschuldigung, wenn ich irgendwelche Importanweisungen vergessen habe.

import XMonad 
import qualified XMonad.StackSet as W 
import XMonad.Util.NamedWindows (getName) 
import Control.Applicative ((<$>)) 
import Data.List (find) 
import Text.Regex.PCRE ((=~)) 

findWindow :: String -> X (Maybe Window) 
findWindow regex = do 
    wmap <- concat <$> (mapM mappings =<< (W.workspaces <$> gets windowset)) 
    :: X [(String, Window)] 
    return (snd <$> find ((=~ regex) . fst) wmap) 
    where mappings :: WindowSpace -> X [(String, Window)] 
     mappings ws = mapM mapping $ W.integrate' (W.stack ws) 
     mapping w = flip (,) w <$> show <$> getName w 

warpTo :: String -> X() 
warpTo regex = 
    findWindow regex >>= (flip whenJust $ windows . W.focusWindow) 

Grundsätzlich sollten Sie dann in der Lage sein, einen Schlüssel zu warpTo "Chromium" >> spawn "xdotool key --clearmodifiers ctrl+r" zu binden. Allerdings funktioniert das bei mir nicht, anscheinend aufgrund einer Race Condition, die ich nicht verstehe. Zum Glück finde ich, dass Folgendes funktioniert:

warpTo "Chromium" >> spawn "sleep 0.2; xdotool key --clearmodifiers ctrl+r" 

Sie könnten mit einer kürzeren Verzögerung davonkommen.