2009-11-28 85 views
41

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

  • 这是做到这一点的最好的语言?
  • 从哪里获得一些资源来学习?
+5

@dmckee我的编译器我正在开发,因为我已经为此购买了一本书,但是我的操作系统已经在Assembly中开发了(参见我的pastebin:** nathanpc.pastebin.com/**,它的名字将会是osasm **;)**) – 2009-11-28 18:45:06

+4

哦,我的...你真的想疯了吗? – 2010-02-18 12:12:00

回答

60

一个重要的决定是你如何与X服务器交谈。您可以将Xlib绑定用于您选择的语言,也可以使用更高级别的XCB绑定。 (如果你是insane,你可能会直接打开一个socket到X服务器。)

要懂得一个窗口管理器应该行为,有指定的公约和政策两个文件:EWMHICCCM 。遵循这些方法,您的窗口管理器在GNOME,KDE,XFCE和任何其他桌面环境中都会表现得很好,尽管在您第一次尝试时忽略它们肯定更容易。

窗口管理器不一定是一个庞大复杂的C球 - 成功的窗口管理器已经用Lisp,Haskell和Python等高级语言编写,甚至一些C语言中的一些仍然很小且可读。用Haskell编写的XMonad在相当长一段时间内一直停留在1000行以下。 StumpWM(Common Lisp)和DWM(C)都很简约。您可能能够阅读他们的源代码以获得有关如何设计WM的一些启发。


利亚Newren写道:

不要去阅读那些东西。他们是真的,真的很沮丧。如果你这样做,你可能最终会赶上你的睡眠,而不是黑客入侵Metacity。 ;-)

想想吧,Metacity的文档有很多关于它如何与Windows进行交互以及它支持哪些扩展属性的说法。

+7

+1用于调查已使用的一些语言。 – dmckee 2009-11-28 02:42:48

+0

我讨厌高层次的东西。虐待坚持c。我也会直接打开x服务器的套接字 – NathanProgrammer 2017-04-19 12:02:10

11

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

一些相关的文件:

  • Xlib manual - 必须阅读低水平X编程。
  • ICCCM - 用于X应用程序和窗口管理器之间通信的约定和接口。
  • XCB - 21世纪的Xlib替代品。这比Xlib要低一些,对你的决定也更少。从我收集的信息来看,结果可能会有更好的表现,因为有更多的异步性潜力,但我应该警告我从来没有用过它。
7
  • 这是做到这一点的最好的语言?

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

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

    我会去看看一些现有的窗口管理器。有很多,所以至少有一些必须有可读的代码。这里是Comprehensive List of Window Managers for Unix

7

我知道这个话题有点老,但我想知道同样的事情。这个叫做i3的窗口管理器似乎也是一个很好的学习方式。