我的一个新家庭项目将是一个简单的窗口管理器,但在开始之前我需要了解一些事情:
答案 0 :(得分:61)
一个重要的决定是如何与X服务器通信。您可以将Xlib绑定用于您选择的语言,也可以使用更高级别的XCB绑定。 (如果您是insane,则可以直接打开X服务器的套接字。)
要知道窗口管理器应该如何表现,有两个文档指定了约定和策略:EWMH和ICCCM 1 。符合这些意味着您的窗口管理器将在GNOME,KDE,XFCE以及任何其他桌面环境中表现良好,尽管在您第一次尝试时忽略它们肯定更容易。
窗口管理器不一定是一个巨大而复杂的C球 - 成功的窗口管理器已经用Lisp,Haskell和Python等高级语言编写,甚至C语言中的一些仍然很小且可读。用Haskell编写的XMonad在相当长的一段时间内保持在1000行以下。 StumpWM(Common Lisp)和DWM(C)都极简主义。您可以阅读他们的源代码,以获得有关如何设计WM的灵感。
1 Elijah Newren写道:
不要去阅读那些东西。他们真的很棒,真的很难过。如果你这样做,你可能最终会赶上睡眠而不是黑客攻击Metacity。 ; - )
考虑一下,Metacity的文档对于它如何与windows交互以及它支持哪种扩展属性有很好的说法。
答案 1 :(得分:27)
C中的tinywm可能对入门有帮助。
答案 2 :(得分:12)
虽然另一种语言和一组库在技术上是可行的,但我认为最好的语言选择是C,以及Xlib或XCB库。 X的大多数窗口管理器使用它,并且这些特定库已经存在很多动力和成熟度。
一些感兴趣的文件:
答案 3 :(得分:8)
哪种语言最好?
无论你最满意的是哪个。有很多成功的窗口管理器的例子,有许多不同的语言。 Qtile和xmonad是很好的例子,分别用Python和Haskell编写。
在哪里可以学到一些资源?
我会去看一些现有的窗口管理器。它们有很多,所以至少其中一些必须具有可读代码。这是Comprehensive List of Window Managers for Unix。
答案 4 :(得分:7)
我知道这个话题有点旧,但我想知道同样的事情。这个名为i3的窗口管理器似乎也是一个值得学习的好窗口管理器。