在 XMonad 中的多显示器设置中循环浏览工作区

Kon*_*ele 4 multiple-monitors xmonad xmonad-contrib

我目前正在使用alt++ctrl和++在工作区之间循环leftaltctrlright

...

    , ((altModMask .|. controlMask, xK_Left),
      prevWS)
    , ((altModMask .|. controlMask, xK_Right),
      nextWS)
Run Code Online (Sandbox Code Playgroud)

这对于单显示器设置来说效果很好。然而,使用双显示器设置时有点令人困惑。这是因为如果当前在另一个屏幕上可见,则要显示的工作区将更改屏幕。例如,如果我在屏幕 0 上有 ws 1,在屏幕 1 上有 ws 2,并且焦点在屏幕 0 上:

1:term (2:web) 3:txt
Run Code Online (Sandbox Code Playgroud)

当我现在执行 a nextWS, ws 2 时,当前在屏幕 1 上的内容将被绘制到屏幕 0,而屏幕 1 将显示 ws 1。

(1:term) 2:web 3:txt
Run Code Online (Sandbox Code Playgroud)

我想要的是一种行为,其中prexWSnextWS跳过当前显示在另一台显示器上的工作区,并仅选择当前未显示的工作区。

是否已经存在这样的命令或者是否有一些xmonad.hs实现此命令的示例?

小智 5

使用XMonad.Actions.DynamicWorkspaceOrder来自xmonad-contrib

import qualified XMonad.Actions.DynamicWorkspaceOrder as DO

...

    , ((altModMask .|. controlMask, xK_Left),
      DO.moveTo Prev HiddenNonEmptyWS)
    , ((altModMask .|. controlMask, xK_Right),
      DO.moveTo Next HiddenNonEmptyWS)
Run Code Online (Sandbox Code Playgroud)