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

  • 哪种语言最适合执行此操作?
  • 哪里可以获得一些学习资源?
有帮助吗?

解决方案

一项重要的决定是如何与 X 服务器对话。您可以使用 扩展库 您选择的语言的绑定,或者您可以使用更高级别的 XCB 绑定。(如果你是 疯狂的, ,您可以直接打开到 X 服务器的套接字。)

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

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


1 伊利亚·纽伦写道:

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

仔细想想, 元城的文档详细介绍了它如何与窗口交互以及它支持哪些类型的扩展属性。

其他提示

小wm C 语言可能对入门有所帮助。

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

一些感兴趣的文件:

  • Xlib手册 - 低级 X 编程必读。
  • ICCCM - X 应用程序和窗口管理器之间通信的约定和接口。
  • XCB - Xlib 的 21 世纪替代品。与 Xlib 相比,这是一个较低的级别,并且为您做出的决定更少。据我所知,由于异步性的可能性更大,结果可能是更好的性能,但我应该警告我从未使用过它。
  • 哪种语言最适合执行此操作?

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top