xmonad를 다시로드 할 때 xmobar를 깨끗하게 다시 생성


9

이것은 작은 성가심이지만이 코드를 사용하여 XMonad 구성 파일이 xmobar를로드하도록했습니다.

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

잘 작동하지만 XMonad를 다시로드 할 때마다 새로운 xmobar 프로세스를 생성합니다. 오래된 것을 죽일 쉬운 방법이 있는지 궁금합니다.

업데이트 : entropo에서 제안한 것처럼 다음과 같은 bash 스크립트를 만들었습니다.

#!/bin/bash

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

/usr/bin/xmobar &

XMonad 구성 파일에서 해당 스크립트를 호출하십시오.

답변:



16

XMobar를 시작하는 쉘 스크립트가 있다면 '잘못하고 있습니다'입니다. xmonad.hs 구성 소스 파일에서 올바른 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

xmonad를 다시로드하더라도 xmobar가 실행되어야합니다. 명령문에서 'xmobar'함수를 얻습니다.

import XMonad.Hooks.DynamicLog (xmobar)

이것은 xmonad-contrib 패키지 에서 나온 것입니다 .

XMonad와 관련하여하고 싶은 대부분의 문제는 이미 해결 된 문제이므로 어디를보아야하는지 알아야합니다. 기본적으로 스크립트를 버리고 대신 사용하십시오. 이게 도움이 되길 바란다.


2
글쎄, 나는 spawnPipeXMonad 웹 사이트 에서 코드를 찾았 는데, 어디를 볼지 알기가 쉽지 않습니다! 그러나 결국, 나는 깨끗하게 사용하고있는 기술을 선호하며 DynamicLog테스트에서 이전 프로세스를 죽이지 않았습니다. 저는 XMonad를 정말 좋아하지만 Haskell은 좋은 구성 언어가 아닙니다.
Nicolas Buduroi

1
좋아, 결국 당신을 위해 일하는 것이 좋다. 그러나 나는 당신이 그것에 대해 잘못 생각하고 있다고 생각합니다. XMonad를 구성하지 않고 확장합니다. Haskell은 지사 확장에 적합합니다.
Robert Massaioli

나를 위해 xmonad를 다시로드 할 때마다 2 개의 새로운 프로세스가 생성됩니다. 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.