我想创build一个简单的堆栈窗口pipe理器( C
)供个人使用,主要是为了学习和挑战自己。
我已经通过twm
的源代码进行了研究,这个代码有相对较less的花里胡哨的function,但由于它不是基于widget工具箱,所以它看起来很低级。 1会使用GTK +等工具包吗? 恐怕twm
中的一些代码和库可能太陈旧了( 编辑:已弃用),我希望窗口pipe理器使用相对现代的库。 为了理解,我也会对如何从头开始一个窗口pipe理器的build议感兴趣 – 这个目的没有太多的教程。
更新:对于那些想到类似项目的人:我最终使用了Common Lisp和CLX库 。 tinywm-lisp作为一个基础和灿烂的CLFSWM和树桩是一个很大的帮助。 作为参考,我使用了Freenode上的CLX – Common LISP X接口 ( PDF警告 )和#xlib
。
无论你做什么,使用XCB而不是Xlib。 它是现代的,异步的,更简单的,可以直接访问X11协议。
一个非常简约的WM是wm2 。 我没有阅读源代码,因此我不知道它是否是一个教学示例。 当然,你可以使用库已经做了很多的抽象和绘图工作,如gdk和gtk 。 但是由于这个项目只是为了个人学习,所以我会直接用Xlib去努力。
以下是可能对您有用的一些链接:
看看dwm的代码。 代码库很漂亮,容易理解。 整个事情大概是2000行。
metacity为某些UI元素使用gtk。 看到它的黑客和自述文件。
另请参阅哪里有一些好的Xlib编程指南?
为了理解,我也会对如何从头开始一个窗口管理器的建议感兴趣
你可能想看看aewm窗口管理器。 代码很小,它的基础很好。 它用C编写,使用Xlib。
我写了一个深入的教程系列,向您展示了如何在C ++中编写X11窗口管理器:
另外,你可以看看一个简单的示例窗口管理器,basic_wm,在
它的教学目的受到了很多评论。
在Xlib和XCB上 – 如果你是第一个开始的话,我会推荐Xlib比XCB。 XCB更高效,但它更低级,更冗长(考虑GUI的汇编语言)。 你不想让自己过早的优化,直到你已经有一个原型的工作。
Xmonad可能是一个很好的开始。