想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .
关闭 7 年前。
我的一个新家庭项目将是一个简单的窗口管理器,但在开始之前我需要了解一些事情:
最佳答案
一个重要的决定是您将如何与 X 服务器通信。您可以使用 Xlib为您选择的语言绑定(bind),或者您可以使用更高级别的 XCB绑定(bind)。 (如果你是 insane ,你可能会直接打开一个到 X 服务器的套接字。)
要了解窗口管理器的行为方式,有两个文档指定了约定和策略:EWMH和 ICCCM 1。符合这些意味着您的窗口管理器将在 GNOME、KDE、XFCE 和任何其他出现的桌面环境中表现良好,尽管在您第一次尝试时简单地忽略它们肯定更容易。
窗口管理器不一定是一个庞大而复杂的 C 语言——成功的窗口管理器是用 Lisp、Haskell 和 Python 等高级语言编写的,甚至一些 C 语言仍然很小且可读。 XMonad ,用 Haskell 编写,在相当长的一段时间内都保持在 1000 行以下。 StumpWM (Common Lisp) 和 DWM (C) 都非常简约。您也许可以阅读他们的源代码,以获得有关如何设计 WM 的一些灵感。
1以利亚纽伦写道:
DO NOT GO AND READ THOSE THINGS. THEY ARE REALLY, REALLY BORING. If you do, you'll probably end up catching up on your sleep instead of hacking on Metacity. ;-)
想想看,Metacity的文档很好地说明了它如何与窗口交互以及它支持什么样的扩展属性。
https://stackoverflow.com/questions/1811321/