Xmonad yeniden yüklendiğinde temiz bir şekilde xmobar yeniden doğuyor


9

Bu sadece küçük bir sıkıntı, ama XMonad yapılandırma dosyası yük xmobar bu kodu kullanarak yaptım:

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

İyi çalışıyor, ancak XMonad her yüklendiğinde yeni bir xmobar süreci ortaya çıkar. Eskisini öldürmenin kolay bir yolu var mı acaba?

güncelleme : entropo tarafından önerildiği gibi, bunun gibi bir bash betiği oluşturdum:

#!/bin/bash

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

/usr/bin/xmobar &

ve bu komut dosyasını XMonad yapılandırma dosyasından çağırınız.

Yanıtlar:



16

XMobar'ı başlatmak için bir kabuk komut dosyanız varsa, o zaman 'yanlış yapıyorsunuz'. Xmonad.hs config kaynak dosyasındaki doğru Haskell işlevlerini kullanarak xmobar'ı başlatmalısınız. Yapılandırmalarımın ana işlevine bir göz atın:

-- 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

Belirgin çizgi budur:

xmonad =<< xmobar myBaseConfig

Bu, xmonad'ı yeniden yüklediğinizde bile çalıştırılması gerektiği gibi xmobar'ı çalıştırır. 'Xmobar' işlevini şu ifadeden alırsınız:

import XMonad.Hooks.DynamicLog (xmobar)

Hangi sırayla xmonad-katkı paketinden geliyor .

Gördüğünüz gibi, XMonad ile yapmak istediğiniz çoğu şey zaten çözülmüş bir sorundur, sadece nereye bakacağınızı bilmeniz gerekir. Temel olarak, senaryonuzu boşalt ve onun yerine kullan. Umarım bu yardımcı olur.


2
spawnPipeXMonad web sitesinde kodu buldum, nereye bakacağınızı bilmek gerçekten kolay değil! Ama sonunda, daha temiz olduğu için kullandığım tekniği, DynamicLogtestlerimdeki eski süreci öldürmediğini tercih ediyorum . XMonad'ı gerçekten seviyorum, ancak Haskell iyi bir yapılandırma dili değil.
Nicolas Buduroi

1
Tamam, senin için işe yarayan her şey sonunda iyidir. Ama bence yanlış düşünüyorsun. XMonad'ı yapılandırmazsınız: genişletirsiniz. Haskell vali uzatma için uygun.
Robert Massaioli

Benim için bu, xmonad'ı her yüklediğimde 2 yeni işlem oluşturuyor. SpawnPipe kullanımı 2 ek işlem oluşturur. ps -ax şunu döndürür: "/ bin / sh -c /.cabal/bin/xmobar ~ / .xmobarrc:", "/ bin / sh -c xmobar", "~ / .cabal / bin / xmonad ~ / .xmobarrc" ve "xmobar".
fsanches

Her ikisini de yeniden yüklemek, yukarıdaki yorumumdaki sorunu düzeltti.
fsanches

1
Eminim spawnPipeirade yeni bir iş parçacığı bir süreç çatal. spawnPipeBunun yerine bir alt işlem oluşturmak istiyorsanız (ana işlem yapıldığında kapanır), korkarım ki kendi spawnPipeişlevinizi yazmak zorunda kalacaksınız .
yyny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.