Xmonad को फिर से लोड करने पर xmobar की सफाई करें


9

यह सिर्फ एक छोटी सी झुंझलाहट है, लेकिन मैंने इस कोड का उपयोग करके एक्समॉनड कॉन्फ़िगरेशन फ़ाइल लोड xmobar बनाया है:

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

यह अच्छी तरह से काम करता है, लेकिन यह हर बार एक नया xmobar प्रक्रिया को जन्म देता है जब हर बार XMonad को फिर से लोड किया जाता है। मुझे आश्चर्य है कि क्या पुराने को मारने का एक आसान तरीका है?

अद्यतन : जैसा कि एंट्रोपो द्वारा सुझाया गया है, मैंने इस तरह से एक बैश स्क्रिप्ट बनाई है:

#!/bin/bash

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

/usr/bin/xmobar &

और उस स्क्रिप्ट को एक्समॉनड कॉन्फ़िगरेशन फ़ाइल से कॉल करें।

जवाबों:



16

यदि आपके पास एक्समोबार शुरू करने के लिए एक शेल स्क्रिप्ट है तो आप 'गलत कर रहे हैं'। आपको xmonad.hs config स्रोत फ़ाइल में सही Haskell फ़ंक्शन का उपयोग करके xmobar शुरू करना चाहिए। मेरे विन्यास मुख्य कार्य पर एक नज़र डालें:

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

मुख्य रेखा यह है:

xmonad =<< xmobar myBaseConfig

यह xmobar चलाता है क्योंकि इसे चलाया जाना चाहिए, तब भी जब आप xmonad को पुनः लोड करते हैं। आपको कथन से 'xmobar' फ़ंक्शन मिलता है:

import XMonad.Hooks.DynamicLog (xmobar)

जो बदले में xmonad-contrib पैकेज से आता है ।

तो आप देखते हैं, अधिकांश चीजें जो आप एक्समोनैड के साथ करना चाहते हैं, पहले से ही एक हल की गई समस्या है, आपको बस यह जानना होगा कि कहां देखना है। मूल रूप से, बस अपनी स्क्रिप्ट को खोदें और इसके बजाय उसका उपयोग करें। आशा है कि ये आपकी मदद करेगा।


2
खैर, मैंने spawnPipeकोड को एक्समोनाड वेबसाइट पर पाया है , यह वास्तव में जानना आसान नहीं है कि कहां देखना है! लेकिन अंत में, मैं उस तकनीक को पसंद करता हूं जिसका उपयोग मैं कर रहा हूं क्योंकि यह क्लीनर है, DynamicLogमेरे परीक्षणों में पुरानी प्रक्रिया को नहीं मारा। मैं वास्तव में एक्समोनाड पसंद करता हूं, लेकिन हास्केल एक अच्छी कॉन्फ़िगरेशन भाषा नहीं है।
निकोलस बुदुरोई

1
ठीक है, आपके लिए जो भी काम करता है वह अंत में अच्छा होता है। लेकिन मुझे लगता है कि आप इसके बारे में गलत सोच रहे हैं। आप XMonad को कॉन्फ़िगर नहीं करते हैं: आप इसे बढ़ाते हैं। विस्तार के लिए प्रीफेक्ट फिट हस्केल।
रॉबर्ट मासैओली

मेरे लिए यह xmonad को पुनः लोड करने के लिए हर बार 2 नई प्रक्रियाओं का निर्माण कर रहा है। स्पॉनपाइप का उपयोग करने से 2 अतिरिक्त प्रक्रियाएं बनती हैं। ps -ax return: "/ bin / sh -c /.cabal/bin/xmobar ~ /" .xmobarrc: "," / bin / sh -c xmobar "," ~ / .cabal / bin / xmonad ~ / .xmobarrc "। और "xmobar"।
3

ऊपर के मेरे सराहनीय में मुद्दे को दोनों को फिर से स्थापित करना।

1
मुझे पूरा यकीन है कि spawnPipeएक नए धागे में आपकी प्रक्रिया एक कांटा बन जाएगी। यदि आप spawnPipeइसके बजाय एक चाइल्ड प्रोसेस बनाना चाहते हैं (एक जो मुख्य प्रक्रिया के बंद होने पर बंद हो जाता है), मुझे डर है कि आपको अपना spawnPipeफ़ंक्शन लिखना होगा ।
yyny
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.