我的新主项目之一将是一个简单的Window Manager,但是在开始之前,我需要了解一些事情:
一个重要的决定是您将如何与X服务器通信。您可以将Xlib绑定用于您选择的语言,也可以使用更高级别的XCB绑定。(如果您很疯狂,则可以直接打开X服务器的套接字。)
要了解窗口管理器的行为方式,有两个文档指定了约定和策略:EWMH和ICCCM 1。符合这些要求意味着您的窗口管理器在GNOME,KDE,XFCE和随之而来的任何其他桌面环境中都将表现良好,尽管在初次尝试时只需忽略它们当然会更容易。
窗口管理器不必是庞大而复杂的C球—成功的窗口管理器已经用Lisp,Haskell和Python等高级语言编写,甚至C语言中的一些语言仍然很小并且可读性强。用Haskell编写的XMonad在1000行以下停留了相当长的时间。StumpWM(通用Lisp)和DWM(C)都非常简约。您也许可以阅读其源代码,以获取有关如何设计WM的灵感。
1伊利亚·纽伦(Elijah Newren)写道:
不要去看这些东西。他们是真的,真的很乏味。如果这样做,您可能最终会赶上睡眠,而不是在Metacity上乱砍。;-)
想到这一点,Metacity的文档很好地说明了它如何与Windows交互以及它支持哪种扩展属性。