2012-11-07 29 views
2

我想在xmonad启动时在不同的工作区启动一些应用程序(这很重要)。所以,我写了下面startupHookXMonad在不同的工作区启动

startupApps :: [String] 
startupApps = ["konsole", "emacs", "firefox", "gvim", "konsole"] 

startupSpawn :: X() 
startupSpawn = zipWithM_ id (map (spawnOn . show) [1..]) startupApps 

但是,它产生在第一工作区的所有应用程序。它似乎是更普遍问题的一部分 - 如果我启动应用程序,它不会在实际启动时得到工作区,而会在加载时得到工作区。 因此,如果我在WS1上启动firefox,然后切换到WS2,firefox将在WS2上产生。

不过,我可以对我的意图做些什么?

+0

你看看这个答案吗? http://superuser.com/questions/478498/start-applications-on-specific-workspaces-in-xmonad –

+0

得到了同样的效果 – KAction

回答

3

您可以使用manageHook来告诉xmonad将某些应用程序移动到某些桌面。

myManageHook = composeAll . concat $ [ 
    [ className =? "Firefox" --> doF (shiftToWs 2) ] 
    , [ className =? "gvim" --> doF (shiftToWs 3) ] 
    -- and so on 
    ] 

虽然className s可能会有所不同。

+0

虽然这会运行吗?它会在每一个动作上运行吗?因为不会故意转移窗户会很烦人...... –

+1

@NoonSilk:不,它只适用于打开新窗口*时。之后你可以任意移动一个窗口。 – bitmask

+0

然后很酷! (愚蠢的注释限制) –