Переменная Haskell вне области видимости

Я настраиваю свой файл xmonad для отправки Stdout в SpawnPipe в соответствии с документацией по адресу https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-DynamicLog.html#v:ppOutput

Вот код, который у меня есть... Я уверен, что мне просто не хватает способа передать 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
}

1 ответ

Решение

Сначала измените 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
}

В {} после значений по умолчанию в основном перезаписывает свойства.

Другие вопросы по тегам