如何使用 XMonad 在启动时在特定工作区上生成程序?

如何使用 XMonad 在启动时在特定工作区上生成程序?

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

相关内容