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
.