如何配置 StdinReader 只显示工作区?

How to configure StdinReader to only show workspaces?

我有一个非常简单的 xmonad/xmobar 配置,在 xmobar 的左侧:

[1] 2 : Tall : How to configure StdinReader to only ...

如何删除布局名称和 window 标题? (TallHow to ...) ??

我可以看到 xmobarrc2 中的模板是这样的:

template = "%StdinReader%}{<fc=#FFF>%date%</fc>"

看起来 StdinReader 提供了所有这 3 个项目,但我该如何配置呢?我似乎找不到任何有用的东西,除了 UnsafeStdinReader,但我真的不明白它是如何工作的,或者我应该如何研究这个..

谁能给我指出正确的方向?

我的整个xmobarrc2:

    Config { font = "xft:Ubuntu Mono:pixelsize=16:antialias=true:hinting=true"
            , borderColor = "black"
            , border = TopB
            , bgColor = "black"
            , fgColor = "grey"
            , position = TopP 0 0
            , commands = [ 
                      Run Weather "CYVR" ["-t","<tempC>C","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000
                    , Run Network "eth0" ["-L","0","-H","32","--normal","green","--high","red"] 10
                    , Run Network "eth1" ["-L","0","-H","32","--normal","green","--high","red"] 10
                    , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Swap [] 10
                    , Run Com "uname" ["-s","-r"] "" 36000
                    , Run Date "%a %_d.%_m  %H:%M" "date" 10
                    , Run StdinReader
                            ]
            , sepChar = "%"
            , alignSep = "}{"
            , template = "%StdinReader%}{<fc=#FFF>%date%</fc>"
            }

您在 xmobarrc2(天气、网络、Cpu、内存、交换、Com、StdinReader 和日期)中定义了很多命令,但您在 template 是 StdinReader 和 Date(如果你愿意,你可以删除其他的)。现在,虽然 Date 按照上面的定义工作(并被格式化),但 StdinReader 只是重现 XMonad 的 (pre-formatted) 输出。因此,改变你想要改变的地方是在你的 xmonad.hs.

XMonad 使用 logHooks 来报告内部状态更新,例如 window 标题、焦点更改等。这样的 logHook 通常用于将这些信息通过管道传输到状态栏中。 XMonad.Hooks.StatusBarPP实现了一个logHook,定义了一个pretty-printer(PP)来格式化要输出的内容。该模块还定义了 xmobarPP,它另外实现了一些特定的功能,例如以 XMobar 期望的方式设置颜色(<fc=#FFF>…</fc>)等。因此,对于 XMobar,您通常使用 [=16 安装 logHook =].

这些 pretty-printer 允许用户使用特定函数自定义格式。其中之一是

ppOrder :: [String] -> [String]

默认情况下使用字符串列表(按此顺序)调用工作区、布局、当前 window 标题以及您使用另一个名为 ppExtras 的函数定义的任何内容.要只有工作区,请将其重新定义为:

ppOrder = \(ws:_) -> [ws]

总而言之,您的 xmonad.hs 需要以下内容:

main = do
  -- ...
  xmproc2 <- spawnPipe "xmobar path/to/your/xmobarrc2"
  -- ...
  xmonad $ ewmh desktopConfig
    { 
      -- ...
      , logHook = dynamicLogWithPP xmobarPP
          { 
            -- ...
            , ppOutput = hPutStrLn xmproc2
            , ppExtras = []
            , ppOrder = \(ws:_) -> [ws]
            -- ...
          }
      -- ...
    }
  -- ...