Hoàn toàn hồi sinh xmobar khi tải lại xmonad


9

Đây chỉ là một phiền toái nhỏ, nhưng tôi đã khiến tệp cấu hình XMonad tải xmobar bằng mã này:

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

Nó hoạt động tốt, nhưng nó sinh ra một quy trình xmobar mới mỗi khi XMonad được tải lại. Tôi tự hỏi nếu có một cách dễ dàng để giết người cũ?

cập nhật : Theo đề xuất của entropo, tôi đã tạo một tập lệnh bash như thế này:

#!/bin/bash

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

/usr/bin/xmobar &

và gọi tập lệnh đó từ tập tin cấu hình XMonad.

Câu trả lời:



15

Nếu bạn có tập lệnh shell để khởi động XMobar thì bạn đang 'làm sai'. Bạn nên bắt đầu xmobar bằng cách sử dụng các hàm Haskell chính xác trong tệp nguồn cấu hình xmonad.hs. Hãy xem chức năng chính cấu hình của tôi:

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

Dòng nổi bật là dòng này:

xmonad =<< xmobar myBaseConfig

Nó chạy xmobar vì nó nên được chạy, ngay cả khi bạn tải lại xmonad. Bạn nhận được hàm 'xmobar' từ câu lệnh:

import XMonad.Hooks.DynamicLog (xmobar)

Lần lượt đến từ gói xmonad-contrib .

Vì vậy, bạn thấy, hầu hết những điều bạn muốn làm với XMonad đã là một vấn đề được giải quyết, bạn chỉ cần biết nơi để tìm. Về cơ bản, chỉ cần bỏ tập lệnh của bạn và sử dụng thay thế. Tôi hi vọng cái này giúp được.


2
Chà, tôi đã tìm thấy spawnPipemã trên trang web XMonad, thật không dễ để biết nên tìm ở đâu! Nhưng cuối cùng, tôi thích kỹ thuật tôi đang sử dụng vì nó sạch hơn, sử dụng DynamicLogkhông giết chết quy trình cũ trong các thử nghiệm của tôi. Tôi thực sự thích XMonad, nhưng Haskell không phải là một ngôn ngữ cấu hình tốt.
Nicolas Buduroi

1
Được rồi, bất cứ điều gì làm việc cho bạn là tốt cuối cùng. Nhưng tôi nghĩ rằng bạn đang nghĩ về nó sai. Bạn không cấu hình XMonad: bạn mở rộng nó. Haskell phù hợp hoàn hảo để mở rộng.
Robert Massaioli

Đối với tôi điều này là tạo ra 2 quy trình mới mỗi lần tôi tải lại xmonad. Sử dụng spawnPipe tạo ra 2 quy trình bổ sung. trả về ps và "xmobar".
fsanches

Cài đặt lại cả hai đã khắc phục sự cố trong phần thưởng của tôi ở trên.
fsanches

1
Tôi khá chắc chắn rằng bạn spawnPipesẽ rẽ nhánh một quá trình trong một chủ đề mới. spawnPipeThay vào đó, nếu bạn muốn tạo một quy trình con (một quy trình sẽ đóng khi quy trình chính thực hiện), tôi e rằng bạn sẽ phải viết spawnPipechức năng của riêng mình .
YoYoYonnY
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.