ウィンドウマネージャーの構築[終了]
-
06-07-2019 - |
質問
新しいホームプロジェクトの1つは単純なウィンドウマネージャーですが、開始する前にいくつかのことを知る必要があります:
- これを行うのに最適な言語はどれですか?
- 学習のためのリソースの入手先
解決
重要な決定の1つは、Xサーバーと通信する方法です。選択した言語に Xlib バインディングを使用するか、上位レベルを使用できます XCB バインディング。 ( insane の場合、Xサーバーへのソケットを直接開くことができます。 。)
ウィンドウマネージャの動作方法を知るために、規則とポリシーを指定する2つのドキュメントがあります。 EWMH および ICCCM 1 。これらに準拠するということは、ウィンドウマネージャーがGNOME、KDE、XFCE、およびその他のデスクトップ環境で適切に動作することを意味しますが、それらを無視するだけで、最初の試行で確実に簡単になります。
ウィンドウマネージャーは、Cの巨大で複雑なボールである必要はありません—成功したウィンドウマネージャーは、Lisp、Haskell、Pythonなどの高水準言語で記述されており、Cの一部でさえ小さくて読みやすいままです。 Haskellで書かれた XMonad は、かなり長い間1000行未満のままでした。 StumpWM (Common Lisp)および DWM (C)はどちらも非常にシンプルです。ソースコードを読んで、WMの設計方法に関するインスピレーションを得ることができるかもしれません。
1 エリヤ・ニューレンはこう書いています:
これらのことを読んで読んではいけません。彼らは本当に本当に退屈です。そうした場合、おそらくMetacityをハッキングするのではなく、睡眠に追いつくことになるでしょう。 ;-)
考えてみると、 Metacity のドキュメントには、どのようにウィンドウとやり取りするか、どのような拡張プロパティがサポートされているかについて説明します。
他のヒント
Cの tinywm は、開始に役立つ場合があります。
別の言語とライブラリのセットは技術的には可能ですが、最適な言語の選択はC、XlibまたはXCBライブラリだと思います。 Xのほとんどのウィンドウマネージャーはそれを使用しており、これらの特定のライブラリにはすでに多くの勢いと成熟度があります。
関心のあるドキュメント:
-
これを行うのに最適な言語はどれですか
どちらが最も快適か。多くの異なる言語で成功したウィンドウマネージャーの例がたくさんあります。 Qtile および xmonad は良い例で、それぞれPythonとHaskellで書かれています。
-
学習するためのリソースの入手先
既存のウィンドウマネージャのいくつかを見ていきます。それらの多くはあるので、少なくともそれらのいくつかは読み取り可能なコードを持たなければなりません。 Unix用ウィンドウマネージャーの包括的なリストです。
このトピックは少し古いことは知っていますが、同じことを考えていました。 i3 と呼ばれるこのウィンドウマネージャーは、学ぶのに適しているようです。