繁体   English   中英

在 CJS / GJS (Gnome JavaScript) 中开发 Cinnamon Shell Extension (Desklet) 的介绍?

[英]Introduction in developing Cinnamon Shell Extension (Desklet) in CJS / GJS (Gnome JavaScript)?

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

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

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

现在,我这样做:

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

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

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

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

Gnome Dev Docu没有提到St . 我在读另一个答案在这里,它似乎外壳扩展,不使用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 文档看起来应该有诸如keyvalstate字段,但这些是未定义的。

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

首先,我应该指出,自从 CJS 从 GJS 分离出来后,我不知道在 CJS 中发生了什么。 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运行嵌套的 gnome-shell。

但同样,我不知道以上是否适用于 Cinnamon/CJS。

小部件概述

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

在 Clutter 的情况下,如果唯一的小部件是GtkWidget ,我喜欢将其视为 Gtk ,以及它的所有机制。 当谈到St ,几乎每类是一个GTK控件,如直接模拟GtkButtonStButton 如果您不知道类的用途,您可能只需看一眼 Gtk 文档,就会意识到“哦, StIcon基本上只是GtkImage ”。

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

活动

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

这是键符号常量列表

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

我在下面的参考手册中添加了一些链接。 对于 St 我还没有找到在线版本。

概述

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

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

文档的第三部分是针对 Cinnamon 的 C 部分,简称为“ Cinnamon 参考手册”。

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

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

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

访问文档

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM