Ви змішуєте два різні способи надсилання інформації на xmobar.
Тут:
main = xmonad =<< xmobar myConfig
Ви використовуєте функцію xmobarзручності. Ви можете натиснути на посилання на джерело документації, щоб побачити, як це визначено. Він використовує statusBarфункцію для запуску xmobar із замовчуванням xmobarPP. Ця statusBarфункція використовується spawnPipeдля запуску програми рядка стану та модифікує PPвихід на цю трубу.
Це панель, яку ви бачите, із принтером та реєстратором за замовчуванням, який друкує лише теги робочих просторів. XMonad.Actions.WorkspaceNamesМодуль використовується асоціюють імена з робочими просторами тегів. Він надає workspaceNamesPPфункцію, яка поєднується з a PPдля отримання імен.
І ось:
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
Ви використовуєте workspaceNamesPPфункцію з xmobarPP, передаєте результат тому, dynamicLogStringщо повертає статус як рядок, і передаєте цей рядок, xmonadPropLogякий записує його як _XMONAD_LOGвластивість у кореневому вікні. Це інший спосіб передачі інформації до xmobar, який можна налаштувати на зчитування цього властивості . У цьому випадку вам не доведеться запускати xmobar з xmonad.
Тож вам слід вирішити, яким способом ви хочете скористатися.
Наприклад, ви можете продовжувати запускати xmobar з XMonad за допомогою spawnPipeта myLogHookзаписати статус на трубу, яку ви переходите до нього:
import XMonad.Util.Run -- spawnPipe and associated functions
main = xmonad . myConfig =<< spawnPipe "xmobar"
myConfig pipe = defaultConfig { startupHook = setWMName "LG3D" ,
logHook = myLogHook pipe}
`additionalKeys`
[((mod4Mask, xK_r), renameWorkspace defaultXPConfig)]
myLogHook pipe = workspaceNamesPP xmobarPP {ppOutput = hPutStrLn pipe}
>>= dynamicLogWithPP
statusBarФункція також змінює manageHookі layoutHookдодати manageDocksі avoidStrutsвід XMonad.Hooks.ManageDocks модуля до них. Ви повинні використовувати цей модуль, щоб панель та вікна не наступали один на одного. У manageDocksмарки XMonad ігнорувати вікна типу доці або на робочому столі. avoidStrutsМодифікатор розташування змінює макети для резервування місця для барів, в відповідно до їх _NET_WM_STRUT_PARTIAL власності.
manageHook layoutHookі handleEventHookє частиною XConfig, щоб додати функцію, надану XMonad.Hooks.ManageDocksмодулем:
myConfig pipe = defaultConfig
{
startupHook = setWMName "LG3D" ,
logHook = myLogHook pipe,
manageHook = manageDocks <+> manageHook defaultConfig,
layoutHook = avoidStruts $ layoutHook defaultConfig,
handleEventHook = docksEventHook <+> handleEventHook defaultConfig
} `additionalKeys` [((mod4Mask, xK_r), renameWorkspace defaultXPConfig) ]
xmobarФункція , яку ви використовували також пов'язує моди + B клавіш швидкого виклику sendMessage ToggleStrutsдля перемикання штрихових прогалин, так що якщо ви хочете , щоб KeyBinding ви повинні додати його теж.
Також:
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.EZConfig
Ви імпортуєте additionalKeysз XMonad.Util.EZConfigмодуля, а потім імпортуєте весь XMonad.Util.EZConfigмодуль.
xmobarховає частину екрану (наприклад, він приховує панель меню терміналів gnome), що раніше не відбувалося.