總之:當我切換到工作區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着色一個窗口」。哈哈。
非常感謝您對如此詳細的答案的每一部分! –