web-dev-qa-db-ja.com

ウィンドウマネージャーを構築する

私の新しいホームプロジェクトの1つは単純なウィンドウマネージャーですが、始める前にいくつかのことを知っておく必要があります。

  • これを行うのに最適な言語はどれですか?
  • 学ぶためのリソースはどこにありますか?
44
Nathan Campos

重要な決定の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 のドキュメントには、それがウィンドウとどのように相互作用するか、およびそれがサポートする拡張プロパティの種類について説明するのに良いビットがあります。

62
Josh Lee

cの tinywm は、始めるのに役立ちます。

27
mtvee

別の言語とライブラリのセットが技術的に可能ですが、最良の言語の選択はC、およびXlibまたはXCBライブラリだと思います。 Xのほとんどのウィンドウマネージャーはそれを使用しており、これらの特定のライブラリーにはすでに多くの勢いと成熟度があります。

興味のあるいくつかの文書:

  • Xlibマニュアル -低レベルのXプログラミングについては必ずお読みください。
  • [〜#〜] icccm [〜#〜] -Xアプリケーションとウィンドウマネージャー間の通信の規約とインターフェース。
  • [〜#〜] xcb [〜#〜] -Xlibの21世紀の置き換え。これは少し低いレベルであり、Xlibよりも決定が少なくなります。私が収集した結果から、非同期性の可能性が高まるため、結果としてパフォーマンスが向上する可能性がありますが、これまでに一度も作業したことがないことを警告する必要があります。
12
asveikau
  • これを行うのに最適な言語はどれですか?

    最も快適な方。さまざまな言語で成功するウィンドウマネージャーの例がたくさんあります。 Qtilexmonad は良い例で、それぞれPythonとHaskellで書かれています。

  • 学ぶためのリソースはどこにありますか?

    私は既存のウィンドウマネージャのいくつかを見に行きます。それらはたくさんあるので、少なくともいくつかは可読コードが必要です。これが nixのウィンドウマネージャの包括的なリスト です。

8
Mikael Auno

このトピックは少し古いことは知っていますが、同じことを考えていました。 i と呼ばれるこのウィンドウマネージャは、そこから学ぶのにも良いようです。

7
Alex Ozer