喜欢,许多,其他的,我正尝试在启动时在特定的 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
}