bspwm 用ステータスバーを作った

Polybar に対する不満を解消するためにステータスバーを自作した。

Polybar が嫌な理由

不満というのは具体的には以下のようなもので、

  • システムトレイがすぐバグる(最新版では結構改善されてる)

  • システムトレイが一番右端なのが嫌(アイコン増えるごとに表示がズレていく)

  • 設定ファイルがわかり辛い( config.h で管理したい)

  • マルチモニタの場合、モニタごとに Polybar を起動しなければならない

  • 機能に対してメモリ食いすぎ

  • そもそも殆どの機能使ってない

メモリに関しては、今時の物差しでは誤差の範疇ではあるけれども 使ってる機能だけなら半分くらいにはなるだろうなと思うと段々と気になってきたので自作することにした。

bspwmbar

できました。

bspwmbar
Figure 1. screenshot

名前の通り完全に bspwm 専用です。
仕事の合間に 4, 5 日かけて書いたのでコードが汚ない。

フォント周りの処理で高 DPI 環境を想定していないのため、多分その手の環境ではサイズがおかしなことになる。
CPU と MEM の表示はフォント使ってないので、どの環境でも同じような表示になると思う。

システムトレイ周り

ステータスバーは兎も角、システムトレイについてはまったく知識がなかったので勉強しながら作ったんですが、
この辺りの日本語情報がほぼ無くて辛かった。結局原文を読んだ。

これらは仕様が決まっているだけで、特に公式でライブラリが用意されてるわけではないので各自が適当に作っているっぽい。
とはいえ、トレイアイコンを描画するウィンドウはトレイを表示したいプログラムが用意するので、描画関連でこっちが実装するのは座標調節ぐらいで良い。

謎の挙動

どういうわけか長時間起動してると、メモリ使用量が減っていく(2MB くらいまで減る)
多分 Xlib が確保してるメモリが何らかのタイミングで開放されるんだとは思うけれど、よくわからない。

上がっているわけではないので問題ないけれど、どうせなら起動後にそのくらいになって欲しい。