2017-08-27 64 views
2

總之:當我切換到工作區X時,我想讓一些程序自動啓動,但前提是它們尚未啓動。如果還沒有啓動,在特定工作區啓動應用程序

這與XMonad startup on different workspaces不同,因爲我不想將窗口移動到特定的工作空間(例如始終將xterm移動到工作空間2)。
這對我不起作用:xmonad spawn on startup in different workspace。我不希望所有應用程序在我登錄時立即啓動,也不會自動啓動,例如xterm如果我關閉它並再次切換到工作區2。


別再想什麼行不通,這裏是工作:
(幾乎)

在我區列表我認爲與工作區名稱touples和列表中的程序來

myWorkspaces = [ ("VIM", ["gvim"]), ("TERM",[myTerminal ++ " -e tmux"]) ] 

-- In my keybindings: 
[ ((mod4Mask, key), loadWorkspace workspace cmd) 
    | (key, (workspace, cmd)) <- zip [xK_1..] myWorkspaces 
] 

予定義的函數以切換到工作區和產卵給定的程序:當我切換那裏開始

loadWorkspace :: String -> [String] -> X() 
loadWorkspace workspace commands = 
    do windows $ W.greedyView workspace 
     mapM_ spawn filtered_commands 
      where filtered_commands :: X [String] 
       filtered_commands = filterM isNotOpen commands 

       isNotOpen :: String -> X Bool 
       isNotOpen command = return True 

(出於某種原因mapM_需要的第二個參數是字符串代替[字符串]。我想在filtered_commands映射spawn的字符串時,任何想法,爲什麼這不工作?)

最後缺少的部分是isNotOpen功能,這應搜索className S中的窗口的當前工作空間和返回command是否已經存在。


我發現它非常困難(與其他語言和技術相比)來搜索XMonad的方式來做事情。對於這種情況,我只能找到如何獲取當前WS - https://superuser.com/a/852152/481701中的窗口。好吧,我想,這給了我一個Window對象,我可以查詢它的一些屬性。

但是沒有。該窗口實際上是Word64的別名!好吧,我想。谷歌xmonad獲取窗口屬性。沒有。 xmonad從窗口ID獲取類名。沒有。 xmonad窗口信息。還有其他十幾種說法類似的方法 - 沒有有用的結果。我所獲得的只是xmonad主頁,FAQ或「Xmonad配置提示」。
我試過這些在hayoo!,而且我能得到的距離最近的是「fromClassName - 根據它的className着色一個窗口」。哈哈。

那麼,我怎樣才能得到一個窗口的className(或任何其他屬性)以外的ManageHook

回答

3

您可能會喜歡dynamic projectstopic spaces作爲預焙替代品。他們並沒有剛好你的建議,但也許其中一個足夠接近,仍然是有用的,並且需要較少的配置工作。

我想映射spawn在filtered_commands中的字符串,任何想法,爲什麼這不起作用?

是的,你需要解除mapM_來處理一元參數(而不是一元函數或返回值)。因此:

filtered_commands >>= mapM_ spawn 

或者,因爲你已經在do塊:

result_of_filtered_commands <- filtered_commands 
mapM_ spawn result_of_filtered_commands 

所以,我怎麼能得到的ManageHook外窗的className(或任何其他屬性)?

the source of className

className = ask >>= (\w -> liftX $ withDisplay $ \d -> fmap resClass $ io $ getClassHint d w) 

你可以取適量參數liftXX行動,而不是一個Query行動。關鍵功能是來自X11軟件包的getClassHint,該軟件還提供對Windows其他屬性的訪問。

+0

非常感謝您對如此詳細的答案的每一部分! –

相關問題