如何在XMonad中循环切换指定的工作区列表?
解决方案:直接指定CycleWS的目标工作区列表
核心思路
用filterWSs替代ignoringWSs,直接筛选出你想要循环的工作区,无需排除无关项。filterWSs接受一个判断工作区是否符合条件的函数,我们可以通过匹配指定的工作区标签来实现精准筛选。
代码示例
方式1:直接指定工作区列表
先定义目标工作区标签集合,再绑定按键:
-- 定义需要循环的目标工作区标签 targetWSs = [ "{Programming}.$Terminals.1>" , "{Programming}.$Terminals.2>" , "{Programming}.$Terminals.3>" -- 按需添加其他工作区标签 ] -- 按键绑定部分 , ("M-3", addName "Switch to Next Target Workspace" $ moveTo Next $ hiddenWS :&: filterWSs (\ws -> workspaceTag ws `elem` targetWSs))
方式2:通过规则匹配简化代码
如果你的目标工作区标签有统一规律(比如都以{Programming}.$Terminals.开头),可以用前缀匹配减少重复代码:
import Data.List (isPrefixOf) -- 定义匹配规则:筛选以指定前缀开头的工作区 isTerminalWS ws = "{Programming}.$Terminals." `isPrefixOf` workspaceTag ws -- 按键绑定 , ("M-3", addName "Switch to Next Terminal Workspace" $ moveTo Next $ hiddenWS :&: filterWSs isTerminalWS)
提问方式优化建议
- 补充完整的工作区命名规则(比如是否有统一的前缀、层级格式),方便给出更精准的简化方案
- 提供完整的CycleWS相关代码片段(比如当前
ignoringWSs的完整列表、绑定代码的上下文) - 明确说明现有方案"粗糙"的具体痛点(比如维护排除列表繁琐、容易漏改标签)
内容的提问来源于stack exchange,提问作者Reggy Elizer
相关产品推荐
相关产品推荐

