ทำความสะอาด xmobar อย่างหมดจดเมื่อโหลด xmonad


9

นี่เป็นเพียงเล็กน้อยที่น่ารำคาญ แต่ฉันได้ทำ xonar โหลดไฟล์การกำหนดค่า XMonad โดยใช้รหัสนี้:

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

มันใช้งานได้ดี แต่มันวางไข่กระบวนการ xmobar ใหม่ทุกครั้งที่ XMonad โหลดใหม่ ฉันสงสัยว่ามีวิธีง่ายๆในการฆ่าคนชราหรือไม่?

ปรับปรุง : ตามที่แนะนำโดย entropo ฉันได้สร้างสคริปต์ทุบตีเช่นนี้:

#!/bin/bash

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

/usr/bin/xmobar &

และเรียกสคริปต์นั้นจากไฟล์การกำหนดค่าของ XMonad

คำตอบ:



16

หากคุณมีเชลล์สคริปต์เพื่อเริ่มต้น XMobar คุณจะ 'ทำผิด' คุณควรเริ่ม xmobar โดยใช้ฟังก์ชั่น Haskell ที่ถูกต้องในไฟล์ต้นฉบับ xmonad.hs config ดูฟังก์ชั่นหลักของฉัน configs:

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

คุณเห็นแล้วว่าสิ่งที่คุณต้องการทำกับ XMonad ส่วนใหญ่เป็นปัญหาที่แก้ไขแล้วคุณแค่ต้องรู้ว่าจะต้องดูที่ไหน โดยทั่วไปเพียงทิ้งสคริปต์ของคุณและใช้สิ่งนั้นแทน ฉันหวังว่านี่จะช่วยได้.


2
ฉันพบspawnPipeรหัสในเว็บไซต์ XMonad แล้วมันไม่ง่ายเลยที่จะรู้ว่าจะดูที่ไหน! แต่ในท้ายที่สุดฉันชอบเทคนิคที่ฉันใช้เพราะสะอาดกว่าการใช้DynamicLogไม่ได้ฆ่ากระบวนการเก่าในการทดสอบของฉัน ฉันชอบ XMonad จริง ๆ แต่ Haskell ไม่ใช่ภาษาการตั้งค่าที่ดี
Nicolas Buduroi

1
เอาล่ะอะไรก็ตามที่ใช้ได้ผลดีกับคุณในที่สุด แต่ฉันคิดว่าคุณคิดผิด คุณไม่ได้กำหนดค่า XMonad: คุณขยายมัน Haskell นายอำเภอพอดีสำหรับการขยาย
Robert Massaioli

สำหรับฉันนี่คือการสร้าง 2 กระบวนการใหม่ทุกครั้งที่ฉันโหลด xmonad การใช้ spawnPipe สร้าง 2 กระบวนการเพิ่มเติม ผลตอบแทน ps -ax: "/ bin / sh -c /.cabal/bin/xmobar ~ / .xmobarrc:", "/ bin / sh -c xmobar", "~ / .cabal / bin / xmonad ~ / .xmobarrc" และ "xmobar"
fsanches

การติดตั้งใหม่ทั้งคู่แก้ไขปัญหาในการยกย่องของฉันข้างต้น
fsanches

1
ฉันค่อนข้างแน่ใจว่าคุณspawnPipeจะแยกกระบวนการในหัวข้อใหม่ หากคุณต้องการspawnPipeสร้างกระบวนการลูกแทน (กระบวนการที่ปิดเมื่อกระบวนการหลักทำ) ฉันเกรงว่าคุณจะต้องเขียนspawnPipeฟังก์ชั่นของคุณเอง
yyny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.