Ви змішуєте два різні способи надсилання інформації на 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), що раніше не відбувалося.