2

我开始学习如何编写 Cinnamon 扩展。好吧,我尝试……虽然我设法编写了第一个简单的desklet,但我仍然没有找到一个真正好的和最新的文档和介绍。

我有以下问题,很高兴得到一些提示:

什么是最好的/建议的开发工作流程?

现在,我这样做:

  • 将更改的文件从我的项目目录复制到.local/share/cinnamon/uuid
  • 打开混色/窥镜,
  • 在那里搜索扩展并通过右键单击重新加载它
  • 切换到日志选项卡并检查错误

与在浏览器中自动热重载更改的vue.js 开发相比,这似乎有点……嗯……耗时。

在哪里可以找到可用小部件和小部件库的介绍?

我知道有 Gtk 和 St 并且都有 JS / GJS / CJS 绑定。

Gnome 开发文档St没有提到. 我在这里读到另一个答案,似乎shell扩展不使用Gtk,而是使用(而St 不是另外?)。

我根本没有找到任何文档CJS,但据我所知,它似乎与GJS. 好像desklets和applet的定义方式不一样?

但是现在,我仍然希望能够(至少简短地)介绍一下哪些小部件可用。虽然在Gtk 中似乎有一整套不同的类似列表的小部件,但我在St中没有找到任何列表小部件。而且似乎我不能将 Gtk 小部件用作 St 小部件的子级......?这个St 文档缺少对可用小部件和类以及它们的用途的任何概述。

有关事件的文档

我发现有一个St.Entry 小部件可用于单行文本输入。我找到了可以将函数绑定到按键释放事件的地方,如下所示:

        this.input.connect('key-release-event', (widget, event) => {
            const input = widget.get_text();
            // ...
            return true; // event has been handled
        });

我没有设法获得有关该事件的一些信息。使用JSON.stringify(event)它打印时显示一个空对象。

这个Gtk 文档看起来应该有诸如keyvaland之类的字段state,但这些是未定义的。

当每一个很小的步骤都需要很长时间才能理解时,这真的有点令人沮丧......所以,我真的很感激任何提示和建议!

4

2 回答 2

2

首先,我应该注意我不知道 CJS 中发生了什么,因为它是从 GJS 中分离出来的。GJS 的发展非常迅速,所以如果 CJS 没有跟踪上游 GJS,你可能不得不向 Cinnamon 社区寻求帮助。

您应该首先从gjs.guide开始,它是 GJS 和 GNOME Shell 扩展文档的积极维护门户。还有一个架构页面简要描述了 GNOME Shell 扩展与 GNOME 平台的关系。

工作流程

关于如何通过重新启动 GNOME Shell 或运行嵌套 Shell 来测试扩展的一小段代码,但在某些时候需要对其进行扩展:

要在 X11 中重新启动 GNOME Shell,请按 Alt+F2 打开“运行”对话框并输入restart(或直接输入r)。

要在 Wayland 上运行新扩展,您可以使用dbus-run-session -- gnome-shell --nested --wayland.

但同样,如果上述内容适用于 Cinnamon/CJS,我不知道。

小部件概述

GJS 的绑定是从自省文件生成的,这些文件也用于生成 API 文档。换句话说,我们的“GJS”版本的 API 文档将只包含从 C 源代码解析的材料。对于 GLib、Gio、Gtk 等库,您可以参考C 文档以获取任何其他材料,它应该仍然有意义。

在 Clutter 的情况下,如果唯一的小部件是 ,我喜欢将其视为 Gtk GtkWidget,并且所有它都是机器。说到St,几乎每个类都是 Gtk 小部件的直接模拟,例如GtkButtonStButton。如果你不知道一个类是干什么用的,那么你很可能只看一眼 Gtk 文档,你就会意识到“哦,StIcon基本上就是这样GtkImage”。

另一方面,Mutter 没有这样的高级教程或概述。最好只是加入 Matrix 或 discourse.gnome.org 并询问扩展开发人员和 shell 开发人员社区。

活动

关于Clutter.KeyEvent,我其实已经忘记了这种情况是如何有点棘手和不明显的。简而言之:在这种情况下,“事件”是一种多态的(我相信它们是 C 中的联合),这就是为什么 GJS 中生成的 API 有点令人困惑的原因。如果您看到Clutter.Event.get_key_symbol()然后浏览该页面,我认为它会变得清晰,您应该找到所需的所有访问器。

这是关键符号常量列表和关键符号常量列表,因为源中的 C 定义可能更容易搜索。

于 2021-09-24T23:15:05.370 回答
1

我刚刚发现https://projects.linuxmint.com/reference/git/cinnamon-tutorials/还包括 Cinnamon 特定的部分(但还没有查看细节,我会更新 :-))

我在下面添加了一些参考手册的链接。对于 St,我还没有找到在线版本。但是:您可以通过sudo apt install cinnamon-doc. 这会将 Devhelp 程序添加到菜单的编程类别中,并且它具有 Cinnamon 组件及其使用的库的参考手册。

概述

Cinnamon 的文档分为 4 个不同的部分(如果算上松饼,则为 5 个)。您当前正在阅读的是教程,其中包括 Cinnamon 所需的一般顶级概述和教程。这被命名为“<strong>肉桂教程”。

第二部分是 Javascript 参考,描述了 Cinnamon 的 Javascript 部分。这被命名为“<strong> Cinnamon Javascript 参考手册”。这是 Cinnamon 中可用的各个函数和对象的技术参考。请注意,本文档面向小程序/扩展开发人员和 Cinnamon 开发人员本身。因此,根据您的身份,某些信息可能完全不相关。

文档的第三部分是 Cinnamon 的 C 部分,简称为《<strong> Cinnamon 参考手册》。

最后一部分是Shell 工具包或 St的文档。这是用于在屏幕上绘制小部件的图形工具包(类似于 Gtk)。

Javascript 文档涵盖的模块是通过 imports.ui.* 和 imports.misc.* 导入的模块。全局对象记录在 Cinnamon 的 C 部分,以及通过 imports.gi.Cinnamon 访问的内容。毫不奇怪,通过 imports.gi.St 访问的东西都记录在 St 部分中。

import.gi.Meta 指的是 Muffin,而其他(例如 imports.gi.Gio)是第三方(通常是 GNOME)库,在其他地方有文档。

访问文档

有两种方法可以访问此文档,其中一种是您当前使用的方法。第一种方法是在线访问,可在http://linuxmint.github.io获得。

第二种方法是在本地访问它。安装程序devhelpcinnamon-doc包(在不同的发行版中可能有不同的命名或包含在 cinnamon 包本身中)。然后运行程序 devhelp 以访问您已安装在系统中的所有文档(不限于 Cinnamon)。

另外值得一看的可能是Linux Mint 开发人员指南

GitHub 中的CJS 存储库还包括一些文档示例(实际上是 GJS 应用程序,但仍然是灵感的来源)。

于 2021-10-04T11:16:57.210 回答