XMonad запускает программы при запуске в указанной рабочей области

Я пытаюсь настроить my xmonad.hs, чтобы при запуске сеанса я запускал массив различных программ на разных рабочих пространствах (например, Terminal in 1; Firefox в 2; Pidgin в 3).

Я уже просмотрел XMonad.Actions.SpawnOn, но поскольку spawnOn возвращается с X (), а не с общим m (), я не могу использовать его в main = do ....

Есть ли функция, которая принимает X -monad и возвращает с помощью IO () или есть ли другой способ обхода?

Ответ 1

Обычный способ - использовать startupHook, который принимает действие X () и выполняет его при каждом запуске. Например.

main = xmonad $ defaultConfig
  { startupHook = do
      spawnOn "workspace1" "program1"
      …
      spawnOn "workspaceN" "programN"
  }