Obtendo xmonad para mostrar o nome da área de trabalho atual no xmobar

1

Novo para xmonad / xmobar / haskell, tentando obter o nome da área de trabalho atual para aparecer no xmobar. Até agora eu tenho esse xmonad.hs:

module Main where
  import XMonad
  import XMonad.Hooks.SetWMName
  import XMonad.Hooks.DynamicLog
  import XMonad.Actions.WorkspaceNames
  import XMonad.Util.EZConfig(additionalKeys)
  import XMonad.Prompt
  import XMonad.Util.EZConfig

  main = xmonad =<< xmobar myConfig

  myConfig = defaultConfig { startupHook = setWMName "LG3D" , logHook = myLogHook } 'additionalKeys' [ ((mod4Mask, xK_r      ), renameWorkspace defaultXPConfig) ]

  myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog

Isso me permite alterar o nome de um espaço de trabalho (pelo menos um prompt com "Nome do espaço de trabalho:" aparece e recebe minha entrada).

No entanto, xmobar não mostra o nome.

    
por mitchus 20.07.2015 / 17:56

1 resposta

1

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 .

    
por 22.07.2015 / 01:05