build立一个窗口pipe理器
我的新家庭项目之一将是一个简单的窗口pipe理器,但在开始之前,我需要知道一些事情:
- 哪一个是最好的语言来做到这一点?
- 在哪里得到一些资源学习?
一个重要的决定是你如何与X服务器通话。 您可以将Xlib绑定用于select的语言,也可以使用更高级别的XCB绑定。 (如果你疯了 ,你可以直接打开X服务器的套接字。)
要知道一个窗口pipe理员应该如何行事,有两个文件规定了公约和政策: EWMH和ICCCM 1 。 遵循这些方法,您的窗口pipe理器在GNOME,KDE,XFCE和任何其他桌面环境中都会performance得很好,尽pipe在第一次尝试时忽略它们肯定更容易。
一个窗口pipe理器不一定是一个巨大的,复杂的C球 – 成功的窗口pipe理器已经用Lisp,Haskell和Python这样的高级语言编写,甚至一些C语言中的一些仍然很小且可读。 用Haskell编写的XMonad在一段时间内保持在1000行以下。 StumpWM (Common Lisp)和DWM (C)都很简约。 您可能能够阅读他们的源代码,以获得有关如何deviseWM的一些启发。
1 Elijah Newren写道:
不要去读这些东西。 他们是真的,真的很沮丧。 如果你这样做,你可能最终会赶上你的睡眠,而不是黑暗的Metacity。 😉
想一想, Metacity的文档有很多关于它如何与windows交互以及它支持什么types的扩展属性的说法。
C中的tinywm可能有助于入门。
虽然另一种语言和一套库在技术上是可行的,但我认为最好的语言select是C语言和Xlib或XCB库。 X的大多数窗口pipe理者都使用它,而且这些特定的图书馆已经有了很多的动力和成熟度。
一些感兴趣的文件:
- Xlib手册 – 必须读取低级别的X编程。
- ICCCM – 用于X应用程序和窗口pipe理器之间通信的约定和接口。
- XCB – 21世纪Xlib的替代品。 这比Xlib要低一些,对你的决定也less一些。 从我收集的结果来看,由于更多的asynchronous性潜力,结果可能会有更好的performance,但是我应该警告我从来没有用过它。
-
哪一个是最好的语言来做到这一点?
无论你是最舒服的。 有许多成功的窗口pipe理器的例子在许多不同的语言在那里。 Qtile和xmonad是很好的例子,分别用Python和Haskell编写。
-
在哪里得到一些资源学习?
我会去看看一些现有的窗口pipe理器。 有很多,所以至less有一些必须有可读的代码。 这里是Unix的窗口pipe理器综合列表 。
我知道这个话题有点老,但我想知道同样的事情。 这个叫做i3的窗口pipe理器似乎也是一个很好的学习机会。