3

我正在配置我的 xmonad 文件以根据https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-DynamicLog.html#v:ppOutput上的文档将 Stdout 发送到 SpawnPipe

这是我到目前为止的代码......我确定我只是缺少一种将 h 传递给 myLogHook 函数的方法!- 谢谢你的帮助。

myLogHook = dynamicLogWithPP $ def { ppOutput = hPutStrLn h }

main = do
h <- spawnPipe "xmobar ~/.xmobar/.xmobarrc"
xmonad $ docks defaults

defaults = def {
  -- simple stuff
    terminal           = myTerminal,
    focusFollowsMouse  = myFocusFollowsMouse,
    clickJustFocuses   = myClickJustFocuses,
    borderWidth        = myBorderWidth,
    modMask            = myModMask,
    workspaces         = myWorkspaces,
    normalBorderColor  = myNormalBorderColor,
    focusedBorderColor = myFocusedBorderColor,

  -- key bindings
    keys               = myKeys,
    mouseBindings      = myMouseBindings,

  -- hooks, layouts
    layoutHook         = myLayout,
    manageHook         = myManageHook,
    handleEventHook    = myEventHook,
    logHook            = myLogHook,
    startupHook        = myStartupHook
}
4

1 回答 1

3

首先,更改myLogHook为将句柄作为参数:

import System.IO
import XMonad

myLogHook :: Handle -> X ()
myLogHook h = dynamicLogWithPP $ def { ppOutput = hPutStrLn h }

然后,将它传递给钩子并从默认值中删除它:

main = do
    h <- spawnPipe "xmobar ~/.xmobar/.xmobarrc"
    xmonad $ docks $ defaults {
        logHook = myLogHook h
    }

defaults = def {
    -- some stuff
    logHook = return ()
    -- more stuff
}

默认值之后基本上会{}覆盖属性。

于 2020-11-20T17:45:19.090 回答