xmonad在登录时自动启动应用程序,但不会重新加载

时间:2017-02-26 11:15:46

标签: xmonad

我正在尝试设置主要应用程序的自动启动。

关注xmonad spawn on startup in different workspace我已将以下内容添加到startupHook

startup :: X ()
startup = do
          setWMName "LG3D"
          spawnOn "workspace1" "urxvt"
          spawnOn "workspace2" "emacs"
          spawnOn "workspace3" "chromium"

但有三个问题:

  1. 我正在复制终端的定义。好像我应该使用shellPromptOn,但它需要一个额外的参数,我不知道从哪里获取它。
  2. 这是将所有内容放在我当前的工作区中。如何找出我的工作空间?我不相信我已经自定义了名称,您可以看到my .xmonad/xmonad.hs on github to confirm
  3. 这将在xmonad --restart上再次启动应用。我们怎能防范呢?能够在不退出的情况下重启xmonad是非常有用的,我不想失去这种能力。

2 个答案:

答案 0 :(得分:0)

  1. 您可以将终端值移动到xmonad和startup都可以调用的函数中。
  2. terminal = "urxvt"

    spawnOn "workspace1" terminal

    1. 不是一个完整的解决方案,只是想到我提到了 spawnOnce - 它不允许您选择产卵工作区。

答案 1 :(得分:0)

对于2.种情况,我能够执行以下操作:

启动时,我遇到的问题与问题类似,但工作区名称已更改

startup :: X ()
startup = do
          spawnOn "ed" "code-insiders"
          spawnOn "www" "opera" 
          spawnOn "slack" "slack" 

这使它们从当前工作空间开始。要将它们移到各自的工作区,我必须添加一个ManageHook,如下所示:

myManageHook :: ManageHook
myManageHook = composeAll
   [ className =? "Code - Insiders" --> doShift "ed"
   , className =? "Opera"      --> doShift "www"
   , className =? "Slack"  --> doShift "slack"
   , manageDocks
   ]

要了解应用程序的className,例如上面的“代码-内部人员”,您需要在终端中运行以下程序

$ xprop | grep WM_CLASS

,然后使用给定的鼠标指针单击所需程序的窗口。这会将className写入终端。