我在具有多个物理屏幕的设置中使用 XMonad。
我希望每个物理屏幕都有一个实例,xmobar
该实例
显示在该特定屏幕上可见哪个工作区,无论
该工作区是否为“当前”/“活动”。
例如
+--------------+ +--------------+
| | | |
| | | |
| | | |
| | | |
+--------------+ +--------------+
|Workspace 3 | |Workspace 5 |
+--------------+ +--------------+
我的电流(为清楚起见而最小化)xmonad.hs
如下。
import XMonad
import XMonad.Layout.NoBorders
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog
import XMonad.Util.Run
import XMonad.Layout.IndependentScreens
main = do
n <- countScreens
xmprocs <- mapM (\i -> spawnPipe $ "xmobar" ++ " -x " ++ show i) [0..n-1]
xmonad $ docks def
{ layoutHook = avoidStruts $ smartBorders $ layoutHook defaultConfig
, logHook = mapM_ (\xmobarPipe -> dynamicLogWithPP $ def
{ ppOutput = hPutStrLn xmobarPipe
, ppCurrent = \s -> s
, ppVisible = \s -> ""
, ppHidden = \s -> ""
, ppLayout = \s -> ""
, ppTitle = \s -> ""
}) xmprocs
}
也就是说,我设法生成了 2 个 xmobar 实例,每个屏幕一个。然而,它只是在两个屏幕的 xmobar 上显示当前活动的工作区(跨屏幕)。例如,它会显示:
+--------------+ +--------------+
| | | |
| | | |
| | | |
| | | |
+--------------+ +--------------+
|Workspace 3 | |Workspace 3 |
+--------------+ +--------------+
现在,我如何实现我真正想要的?
我认为这里的配置
https://github.com/nwf/xconfig/blob/208e6d6ce48fba45ec30bb1df1389f9ff2263edd/xmonad/lib/XMonad/Actions/XMobars.hs#L163
可能包含对答案的提示,但我对 Haskell 不够精通
从那个例子回到我可以使用的最小的东西。