Під час перезавантаження xmonad слід чітко відробити xmobar


9

Це лише невелике роздратування, але я змусив файл конфігурації XMonad завантажувати xmobar за допомогою цього коду:

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

Він працює добре, але породжує новий процес xmobar щоразу, коли XMonad перезавантажується. Цікаво, чи є простий спосіб вбити старого?

update : За пропозицією entropo, я створив такий сценарій bash, як цей:

#!/bin/bash

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

/usr/bin/xmobar &

і викличте цей скрипт з конфігураційного файла XMonad.

Відповіді:



16

Якщо у вас є сценарій оболонки, щоб запустити XMobar, то ви робите це неправильно. Вам слід запустити xmobar за допомогою правильних функцій Haskell у вихідному файлі конфігурації xmonad.hs. Погляньте на головну функцію моїх конфігурацій:

-- 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 підходить для продовження.
Роберт Массайолі

Для мене це створення двох нових процесів щоразу, коли я перезавантажую 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.