我一直想开发一些 Gnome Shell 扩展,因为它们只是用 javascript 编写的,但是我找了好久,却发现几乎没有文档,到处都是人说使用基本的 Gnome 文档,但这没有帮助,我找不到任何关于扩展导入的文档,或者任何用于扩展开发的 javascript api,我尝试查看一些教程(其中大多数是针对 Gnome 3.0,而不是 3.2),但没有任何帮助。
有人知道他们是否正在编写扩展开发文档吗?我真的很想得到一些好的文档……
答案1
我对演示代码和教程不满意的原因是它们引入了一堆随机导入,但从未解释它们是什么或如何使用它们。我正在构建自己的答案,其他人可以添加内容,以便人们真正知道他们可以调用哪些函数、可以导入什么等等。
已生成以下文档Gnome 外壳,但它有些不完整——我无法找到在各种教程、示例和已发布的扩展中看到的大多数内容。
唯一真正可靠的文档是 Gnome Shell 源代码本身。根本没有其他最新或完整的方法来了解可用的内容。
这两个起点特别好:
C 源代码显示有一个重要的对象,global
它不需要导入,并且可以访问窗口管理器(包括键绑定)、会话信息、可用屏幕等内容。以下是源代码:
- 这shell-global.c来源本身
- 源的一部分添加了可用属性
- 源代码中显示的部分底层对象的类型
我想知道如何使用global.display
对象,目前最好的文档是由 Alan Knowles 提供。
其他内容可以通过 GObject 内省绑定导入,例如:
- 这Clutter UI 库(
imports.gi.Clutter
) - GLib 本身(
imports.gi.GLib
) - 这Shell 工具包(
imports.gi.St
)
一般来说,你可以浏览各种 Gnome 组件的参考文档寻找其他进口商品。
关于镜子的注释:不过,在实际应用中使用这些导入有一些怪癖——我浪费了很多时间只是尝试即时测试。例如:
const Clutter = imports.gi.Clutter;
...不起作用,因为Clutter
已经存在。但是:
const MyClutter = imports.gi.Clutter;
...也不起作用;MyClutter
未定义,无法使用。您必须执行以下操作:
MyClutter = imports.gi.Clutter;
当然,在这种情况下Clutter
已经存在,所以其实没有必要。但由于没有记录下 Looking Glass 命名空间中已有和未已有的内容,如果您尝试导入某些内容并遇到这些问题,请记住这一点。
剩余问题:
- 什么是
Mainloop
?这是进口的main.js
并且似乎具有与 GLib 主循环相关的函数。有这方面的文档吗? - 是什么
imports.misc
?里面似乎有一些非常有用的东西,比如ExtensionUtils
— 那是什么? - 您如何使用 DBus?自省又如何呢?
答案2
本分步教程将帮助您创建 gnome 3.4 的扩展: https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial
答案3
文档有点滞后,一个潜在的信息来源是操作系统水管工的沉思,例如这篇关于更新 GNOME Shell 扩展以兼容版本 3.2
根据您需要的信息,您可以尝试 gnome 邮件列表。