Você está misturando duas maneiras diferentes de enviar informações para o xmobar.
Aqui:
main = xmonad =<< xmobar myConfig
Você está usando a função de conveniência xmobar . Você pode clicar no link da fonte na documentação para ver como ela é definida. Ele usa a função statusBar para iniciar o xmobar com o padrão xmobarPP . A função statusBar usa spawnPipe para ativar o aplicativo da barra de status e modifica o PP para a saída para esse canal.
Esta é a barra que você está vendo, com a impressora e registrador padrão que imprime apenas as tags de espaços de trabalho. O módulo XMonad.Actions.WorkspaceNames que você está usando associa nomes a tags de espaços de trabalho. Ele fornece a função workspaceNamesPP que combina com um PP para recuperar os nomes.
E aqui:
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
Você está usando a função workspaceNamesPP com xmobarPP , passa o resultado para dynamicLogString que retorna o status como uma string e passa essa string para xmonadPropLog que a grava como uma propriedade _XMONAD_LOG na janela raiz. Esta é uma maneira diferente de comunicar as informações ao xmobar, que pode ser configurado para ler essa propriedade . Nesse caso, você não precisa iniciar o xmobar a partir do xmonad.
Então você deve decidir qual caminho você quer usar.
Você pode, por exemplo, continuar lançando o xmobar do XMonad usando spawnPipe , e tem myLogHook escrever o status em um pipe que você passa para ele:
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
A função statusBar também modifica o manageHook e layoutHook para adicionar o manageDocks e avoidStruts do XMonad.Hooks.ManageDocks módulo para eles. Você deve usar este módulo para que a barra e as janelas não se sobreponham. O manageDocks faz o XMonad ignorar as janelas do tipo dock ou desktop. O modificador de layout avoidStruts altera os layouts para reservar espaço para as barras, de acordo com seus _NET_WM_STRUT_PARTIAL propriedade .
manageHook layoutHook e handleEventHook fazem parte de XConfig , para adicionar a função fornecida pelo módulo 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) ]
A função xmobar que você estava usando também liga o atalho da tecla mod + B a sendMessage ToggleStruts para alternar as lacunas da barra, então se você quiser essa atadura de teclas, você deve adicioná-la também.
Além disso:
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.EZConfig
Você está importando additionalKeys do módulo XMonad.Util.EZConfig e, em seguida, está importando todo o módulo XMonad.Util.EZConfig .