52

我的一个新家庭项目将是一个简单的窗口管理器,但在开始之前我需要知道一些事情:

  • 哪种语言最好?
  • 在哪里可以获得一些学习资源?
4

5 回答 5

70

一个重要的决定是您将如何与 X 服务器通信。您可以使用Xlib绑定​​作为您选择的语言,也可以使用更高级别的XCB绑定。(如果你了,你可能会直接打开一个到 X 服务器的套接字。)

要了解窗口管理器的行为方式,有两个文档指定了约定和策略:EWMHICCCM 1。符合这些意味着您的窗口管理器将在 GNOME、KDE、XFCE 和任何其他出现的桌面环境中表现良好,尽管在您第一次尝试时简单地忽略它们肯定更容易。

窗口管理器不必是一个庞大而复杂的 C 语言——成功的窗口管理器是用 Lisp、Haskell 和 Python 等高级语言编写的,甚至一些 C 语言仍然很小且可读。用 Haskell 编写的XMonad在相当长的一段时间内都保持在 1000 行以下。StumpWM (Common Lisp) 和DWM (C) 都非常简约。您也许可以阅读他们的源代码以获得一些关于如何设计 WM 的灵感。


1以利亚纽伦写道:

不要去阅读那些东西。他们真的,真的很无聊。如果你这样做了,你最终可能会赶上你的睡眠,而不是在 Metacity 上进行黑客攻击。;-)

想一想,Metacity的文档有很多关于它如何与窗口交互以及它支持什么样的扩展属性的说法。

于 2009-11-28T02:35:46.573 回答
29

C中的tinywm可能有助于入门。

于 2009-11-28T02:24:49.700 回答
12

虽然另一种语言和一组库在技术上是可行的,但我认为最好的语言选择是 C,以及 Xlib 或 XCB 库。X 的大多数窗口管理器都使用它,并且这些特定库已经有很多动力和成熟度。

一些感兴趣的文件:

  • Xlib 手册- 必须阅读低级 X 编程。
  • ICCCM - X 应用程序和窗口管理器之间通信的约定和接口。
  • XCB - Xlib 的 21 世纪替代品。这比 Xlib 级别低一些,并且为您做出的决定更少。根据我的收集,结果可能是更好的性能,因为异步的可能性更大,但我应该警告我从未使用过它。
于 2009-11-28T02:18:09.077 回答
8
  • 哪种语言最好?

    哪个你最舒服。有许多不同语言的成功窗口管理器示例。Qtilexmonad是很好的例子,分别用 Python 和 Haskell 编写。

  • 在哪里可以获得一些学习资源?

    我会去看一些现有的窗口管理器。它们有很多,因此至少其中一些必须具有可读的代码。这是Unix 窗口管理器的综合列表

于 2009-11-28T02:23:42.637 回答
6

我知道这个话题有点老了,但我想知道同样的事情。这个名为i3的窗口管理器似乎也是一个值得学习的好工具。

于 2012-08-11T19:12:09.363 回答