複数の物理画面を備えたセットアップで 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
}
つまり、各画面に 1 つずつ、xmobar の 2 つのインスタンスを生成することができました。ただし、両方の画面の xmobar に現在アクティブなワークスペース (複数の画面にわたって) を表示するだけです。たとえば、次のように表示されます。
+--------------+ +--------------+
| | | |
| | | |
| | | |
| | | |
+--------------+ +--------------+
|Workspace 3 | |Workspace 3 |
+--------------+ +--------------+
では、実際に欲しいものをどのように達成するのでしょうか?
ここの構成https://github.com/nwf/xconfig/blob/208e6d6ce48fba45ec30bb1df1389f9ff2263edd/xmonad/lib/XMonad/Actions/XMobars.hs#L163には答えのヒントが含まれていると思います
が、私は Haskell に十分に精通していません。
その例から、私が使用できる最小限のものに戻ります。