Reaparecer com facilidade o xmobar ao recarregar o xmonad


9

Isso é apenas um pequeno aborrecimento, mas fiz o arquivo de configuração do XMonad carregar o xmobar usando este código:

xmproc <- spawnPipe "/use/bin/xmobar ~/.xmobarrc"

Funciona bem, mas gera um novo processo xmobar toda vez que o XMonad é recarregado. Gostaria de saber se existe uma maneira fácil de matar o antigo?

update : Como sugerido por entropo, criei um script bash como este:

#!/bin/bash

for PID in `pgrep xmobar`; do
    kill ${PID} > /dev/null &
done

/usr/bin/xmobar &

e chame esse script do arquivo de configuração do XMonad.

Respostas:



16

Se você possui um script de shell para iniciar o XMobar, está 'fazendo errado'. Você deve iniciar o xmobar usando as funções Haskell corretas no arquivo de configuração xmonad.hs. Dê uma olhada na minha principal função de configurações:

-- put it all together
main = do
    nScreens <- countScreens    -- just in case you are on a laptop like me count the screens so that you can go
    xmonad =<< xmobar myBaseConfig
      { modMask = myModMask
      , workspaces = withScreens nScreens myWorkspaces
      , layoutHook = myLayoutHook nScreens
      , manageHook = myManageHook
      , borderWidth = myBorderWidth
      , normalBorderColor = myNormalBorderColor
      , focusedBorderColor = myFocusedBorderColor
      , keys = myKeys
      , mouseBindings = myMouseBindings
      , logHook = myLogHook
      }
    where
        myLogHook = dynamicLogXinerama

myBaseConfig = gnomeConfig

A linha saliente é esta:

xmonad =<< xmobar myBaseConfig

Isso executa o xmobar como deveria ser executado, mesmo quando você recarrega o xmonad. Você obtém a função 'xmobar' da instrução:

import XMonad.Hooks.DynamicLog (xmobar)

Por sua vez, vem do pacote xmonad-contrib .

Como você vê, a maioria das coisas que você deseja fazer com o XMonad já é um problema resolvido, basta saber onde procurar. Basicamente, basta abandonar seu script e usá-lo. Eu espero que isso ajude.


2
Bem, eu encontrei o spawnPipecódigo no site do XMonad, não é realmente fácil saber onde procurar! Mas no final, prefiro a técnica que estou usando, pois ela é mais limpa, DynamicLognão matou o antigo processo nos meus testes. Eu realmente gosto do XMonad, mas Haskell não é uma boa linguagem de configuração.
Nicolas Buduroi

1
Ok, o que funcionar para você é bom no final. Mas acho que você está pensando errado. Você não configura o XMonad: você o estende. Haskell, o prefeito apto para extensão.
Robert Massaioli

Para mim, isso está criando 2 novos processos cada vez que recarrego o xmonad. Usar spawnPipe cria 2 processos adicionais. ps -ax retorna: "/ bin / sh -c /.cabal/bin/xmobar ~ / .xmobarrc:", "/ bin / sh -c xmobar", "~ / .cabal / bin / xmonad ~ / .xmobarrc" e "xmobar".
Fsanches

A reinstalação de ambos corrigiu o problema no meu comentário acima.
Fsanches

1
Tenho certeza de que você spawnPipeirá bifurcar um processo em um novo segmento. Se você deseja spawnPipecriar um processo filho (que fecha quando o processo principal o faz), receio que você tenha que escrever sua própria spawnPipefunção.
yyny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.