XMonad v0.15启动时应用无法分配到指定工作区的问题
解决XMonad启动应用到指定工作区失效的问题
针对你遇到的Firefox、Spotify、Slack全部启动在工作区1的问题,按以下步骤修复:
1. 导入必要模块
确保配置文件顶部导入XMonad.Actions.SpawnOn模块,它提供spawnOn和manageSpawn的核心实现:
import XMonad.Actions.SpawnOn
2. 更新manageHook,添加manageSpawn
spawnOn需要配合manageSpawn才能生效,它负责跟踪通过spawnOn启动的窗口并将其移动到指定工作区。修改你的manageHook:
manageHook = manageDocks <+> manageSpawn <+> manageHook defaultConfig
3. 优化应用启动逻辑(可选但推荐)
部分应用启动较慢,可能导致spawnOn无法正确关联窗口,建议用spawnOnOnce替代spawnOn,它会确保应用只启动一次,且等待窗口出现后再执行工作区跳转:
myStartupHook :: X() myStartupHook = composeAll [ spawnOnOnce "1:web" "firefox" , spawnOnOnce "3:music" "spotify" , spawnOnOnce "4:chat" "slack"]
4. 备用方案:手动指定窗口匹配规则
如果上述方法仍不生效,可以直接通过窗口类名强制指定工作区。先在终端执行xprop | grep CLASS,点击目标应用窗口获取正确的类名,然后在manageHook中添加规则:
manageHook = manageDocks <+> manageSpawn <+> composeAll [ className =? "Firefox" --> doShift "1:web" , className =? "Spotify" --> doShift "3:music" , className =? "Slack" --> doShift "4:chat" ] <+> manageHook defaultConfig
修改完成后,执行xmonad --recompile重新编译配置,再重启XMonad即可生效。
内容的提问来源于stack exchange,提问作者Anthony W
相关产品推荐
相关产品推荐

