![如何使用 XMonad 在启动时在特定工作区上生成程序?](https://linux22.com/image/1635228/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20XMonad%20%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%9C%A8%E7%89%B9%E5%AE%9A%E5%B7%A5%E4%BD%9C%E5%8C%BA%E4%B8%8A%E7%94%9F%E6%88%90%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
喜欢,许多,其他的,我正尝试在启动时在特定的 Xmonad 工作区上生成一个程序。
以下是xmonad.hs
在工作区 4 上启动 Firefox 的示例:
import XMonad
import XMonad.Actions.SpawnOn
myStartupHook :: X()
myStartupHook = spawnOn "4" "/usr/bin/firefox"
main :: IO()
main = xmonad $ defaultConfig {
modMask = mod4Mask,
startupHook = myStartupHook,
}
然而,启动时,Firefox 会在工作区 1 上启动,而不是 4。根据此 Reddit 帖子,我需要做的就是manageSpawn
在这段代码中添加一些内容。以下是我尝试的:
import XMonad
import XMonad.Actions.SpawnOn
myStartupHook :: X()
myStartupHook = spawnOn "4" "/usr/bin/firefox"
main :: IO()
main = xmonad $ defaultConfig {
modMask = mod4Mask,
startupHook = manageSpawn <+> myStartupHook,
}
但我收到以下错误:Couldn't match type Query (base-4.13.0.0:Data.Semigroup.Internal.Endo WindowSet) with X () Expected type: X () Actual type: ManageHook
。文档对于 spawnOn 来说也没有什么帮助。
我需要添加上述哪些内容xmonad.hs
才能在工作区 4 上启动 Firefox?
答案1
您应该设置manageSpawn
为管理钩子而不是startupHook。以下是xmonad.hs
在工作区 4 上生成 Firefox 的工作原理:
import XMonad
import XMonad.Actions.SpawnOn
myStartupHook :: X()
myStartupHook = spawnOn "4" "/usr/bin/firefox"
main :: IO()
main = xmonad $ defaultConfig {
modMask = mod4Mask,
startupHook = myStartupHook,
manageHook = manageSpawn
}