Xmonad - 在指定的监视器和工作区上静默生成程序?

Xmonad - Spawn a program silently on specified monitor and workspace?

如何在特定监视器和特定工作区上静默启动程序而不专注于它,有点像按 Mod + Shift + n 时所做的那样?以下方法的问题

className =? "ProgramClass" --> doShift ( workspaces !! n ),

是它不仅将 window 移动到工作区,它还会打开一个工作区,我宁愿避免这样做。 spawnOn 本质上是一样的。

这是我现在的config

这里的评论太长了。我还没有测试解决方案:

doShift并没有把工作空间改成文档,问题是新的window是直接在新的工作空间打开的。我认为您应该定义 ManageHook 并执行它:

-- neccesary imports
import XMonad.ManageHook
import qualified XMonad.StackSet as W

-- creates a new ManageHook
openSilent :: WorkspaceId -> ManageHook
openSilent tows = do
   fromws <- liftX $ return . W.currentTag . windowset =<< get -- get the current ws tag
   wid    <- ask                                             -- get opened windowId
   doF $ W.view fromws . W.insertUp wid . W.view tows
--       |               |                |- move focus to "to" workspace
--       |               |- insert window
--       |- move focus back to "from" workspace

钩子应该正常使用

className =? "ProgramClass" --> openSilent "workspaceName"

好的,我的问题是 XMonad.Hooks.EwmhDesktops 从配置中删除它后 doShift 可以正常工作而不会窃取我的注意力,并且可以在不激活它的情况下将项目移动到专用工作区。