2009-11-28 86 views
41

我的一個新家園項目將是一個簡單的窗口管理器,但開始前我需要知道的一些事情:建立一個窗口管理器

  • 這是做到這一點的最好的語言?
  • 從哪裏獲得一些資源來學習?
+5

@dmckee我的編譯器我正在開發,因爲我已經爲此購買了一本書,但是我的操作系統已經在Assembly中開發了(參見我的pastebin:** nathanpc.pastebin.com/**,它的名字將會是osasm **;)**) – 2009-11-28 18:45:06

+4

哦,我的...你真的想瘋了嗎? – 2010-02-18 12:12:00

回答

60

一個重要的決定是你如何與X服務器交談。您可以將Xlib綁定用於您選擇的語言,也可以使用更高級別的XCB綁定。 (如果你是insane,你可能會直接打開一個socket到X服務器。)

要懂得一個窗口管理器應該行爲,有指定的公約和政策兩個文件:EWMHICCCM 。遵循這些方法,您的窗口管理器在GNOME,KDE,XFCE和任何其他桌面環境中都會表現得很好,儘管在您第一次嘗試時忽略它們肯定更容易。

窗口管理器不一定是一個龐大複雜的C球 - 成功的窗口管理器已經用Lisp,Haskell和Python等高級語言編寫,甚至一些C語言中的一些仍然很小且可讀。用Haskell編寫的XMonad在相當長一段時間內一直停留在1000行以下。 StumpWM(Common Lisp)和DWM(C)都很簡約。您可能能夠閱讀他們的源代碼以獲得有關如何設計WM的一些啓發。


利亞Newren寫道:

不要去閱讀那些東西。他們是真的,真的很沮喪。如果你這樣做,你可能最終會趕上你的睡眠,而不是黑客入侵Metacity。 ;-)

想想吧,Metacity的文檔有很多關於它如何與Windows進行交互以及它支持哪些擴展屬性的說法。

+7

+1用於調查已使用的一些語言。 – dmckee 2009-11-28 02:42:48

+0

我討厭高層次的東西。虐待堅持c。我也會直接打開x服務器的套接字 – NathanProgrammer 2017-04-19 12:02:10

11

儘管在技術上可能有另一種語言和一組庫,但我認爲最好的語言選擇是C和Xlib或XCB庫。 X的大多數窗口管理者都使用它,而且這些特定的庫已經有很多動力和成熟度。

一些相關的文件:

  • Xlib manual - 必須閱讀低水平X編程。
  • ICCCM - 用於X應用程序和窗口管理器之間通信的約定和接口。
  • XCB - 21世紀的Xlib替代品。這比Xlib要低一些,對你的決定也更少。從我收集的信息來看,結果可能會有更好的表現,因爲有更多的異步性潛力,但我應該警告我從來沒有用過它。
7
  • 這是做到這一點的最好的語言?

    無論你最舒服。有許多成功的窗口管理器在很多不同語言的例子。 Qtilexmonad是很好的例子,分別用Python和Haskell編寫。

  • 從哪裏可以獲得一些學習資源?

    我會去看看一些現有的窗口管理器。有很多,所以至少有一些必須有可讀的代碼。這裏是Comprehensive List of Window Managers for Unix

7

我知道這個話題有點老,但我想知道同樣的事情。這個叫做i3的窗口管理器似乎也是一個很好的學習方式。