XMonad如何在特定的工作区启动程序?

12

我正在尝试配置我的xmonad.hs,以便在启动会话时在不同的工作区域中启动一系列不同的程序(例如1中的终端;2中的Firefox;3中的Pidgin)。

我已经研究了XMonad.Actions.SpawnOn,但由于spawnOn返回一个X()而不是常见的m (),所以我不能在main = do ...中使用它。

是否有一个函数接受X-monad并返回IO(),或者是否有其他解决方法?


X 是 Monad 的一个实例,因此 X () 可以与 m () 一起使用 - 您可以在 X () 操作中使用 do-notation。 - amindfv
1个回答

12

通常的方法是使用 startupHook,它接受一个 X () 的动作,并在每次启动时执行。

例如:

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

1
我根据它们的功能将我的工作区命名为“终端”、“Web”、“聊天”等,但是将这些名称作为spawnOn函数的参数传递对某些程序(如eclipse)不起作用。我目前正在通过为每个应用程序设置管理钩子来解决这个问题,例如className =?“Firefox” - > doF(W.shift(customWorkspaces !! 1)),并使用常规的spawn进行生成。 - salbeira
4
注意:spawnOn 函数来自于 xmonad-contrib 包。 - amindfv
8
我有这个 { startupHook = do spawnOn "workspace2" "emacs" },但是程序只会在登录后的第一个工作区或者重新启动xmonad后的当前工作区启动。 - Roger Garza
4
1)默认的工作区名称是什么? 2)这将在重新加载时启动新的应用程序,而不仅仅是在全新启动时。这如何防范重启? - fommil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接