私の新しいホームプロジェクトの1つは単純なウィンドウマネージャーですが、始める前にいくつかのことを知っておく必要があります。
重要な決定の1つは、Xサーバーと通信する方法です。選択した言語の Xlib バインディングを使用するか、より上位の [〜#〜] xcb [〜#〜] バインディングを使用できます。 ( insane の場合、Xサーバーへのソケットを直接開く可能性があります。)
ウィンドウマネージャーの動作を知るために、規則とポリシーを指定する2つのドキュメントがあります: [〜#〜] ewmh [〜#〜] と [〜#〜] icccm [〜#〜]1。これらに準拠することは、GNOME、KDE、XFCE、およびその他のデスクトップ環境でウィンドウマネージャーが適切に動作することを意味します。
ウィンドウマネージャーは、巨大で複雑なCのボールである必要はありません—成功するウィンドウマネージャーは、LISP、Haskell、Pythonなどの高級言語で記述されており、Cの一部でさえ、小さくて読みやすいままです。 XMonad はHaskellで書かれており、かなり長い間1000行未満でした。 StumpWM (一般的なLISP)と [〜#〜] dwm [〜#〜] (C)はどちらも非常にシンプルです。ソースコードを読んで、WMの設計方法に関するヒントを得ることができるかもしれません。
1 エリヤ・ニューレンは書きました:
行ってこれらのものを読んではいけません。彼らは本当に、本当に退屈です。そうした場合、おそらくMetacityをハッキングする代わりに、睡眠に追いつくことになります。 ;-)
考えてみてください Metacity のドキュメントには、それがウィンドウとどのように相互作用するか、およびそれがサポートする拡張プロパティの種類について説明するのに良いビットがあります。
cの tinywm は、始めるのに役立ちます。
別の言語とライブラリのセットが技術的に可能ですが、最良の言語の選択はC、およびXlibまたはXCBライブラリだと思います。 Xのほとんどのウィンドウマネージャーはそれを使用しており、これらの特定のライブラリーにはすでに多くの勢いと成熟度があります。
興味のあるいくつかの文書:
これを行うのに最適な言語はどれですか?
最も快適な方。さまざまな言語で成功するウィンドウマネージャーの例がたくさんあります。 Qtile と xmonad は良い例で、それぞれPythonとHaskellで書かれています。
学ぶためのリソースはどこにありますか?
私は既存のウィンドウマネージャのいくつかを見に行きます。それらはたくさんあるので、少なくともいくつかは可読コードが必要です。これが nixのウィンドウマネージャの包括的なリスト です。
このトピックは少し古いことは知っていますが、同じことを考えていました。 i と呼ばれるこのウィンドウマネージャは、そこから学ぶのにも良いようです。