登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: gnome-builder 和 gjs     [回主站]     [分站链接]
标题
gnome-builder 和 gjs
clq
浏览(204) + 2023-02-13 10:27:09 发表 编辑

关键字:



https://github.com/GNOME/gnome-sound-recorder/blob/master/meson.build
使用了一个叫 gjs 的东西,使得可以用 ts 来开发 gtk 程序。
这个是 gnome-builder 自带的示例。
http://garfileo.is-programmer.com/2011/9/22/gjs-basic.29644.html
gjs 提供了 imports.gi 对象,使用它可以导入被 GObject Introspection(GI)认可的 typelib 二进制文件所关联的 GNOME 模块对应的 JavaScript 对象,然后 gjs 便可以访问底层基于 GObject 库实现的 C 程序库。看下面的示例:

const GLib = imports.gi.GLib;

print (GLib.get_home_dir ());

当使用 gjs 执行这个脚本程序时,便会在终端中输出 $HOME 的值。

--------------------------------------------------------
http://garfileo.is-programmer.com/2011/9/22/gjs-basic.29644.html


使用 gdevilspie 对窗口进行自动定位
与 GNOME 3 风格一致的 Firfeox 主题
初识 Gjs
Garfileo posted @ 2011年9月22日 10:20 in Linux 的世界 with tags Gjs GNOME 3 , 8323 阅读

按照 GNOME 官方的说法,Gjs 是 GNOME 的 JavaScript 绑定,主要基于 Spider Monkey 这个 JavaScript 引擎与 GObject Introspection [1] 实现。本文简单介绍一下 Gjs 的用法,之所以是简单介绍,是因为我对 JavaScript 不太熟悉。
Gjs 解析器

Gjs 解析器基于 Spider Monkey 实现,后者是 Firefox 的 JavaScript 引擎。如果系统中已安装了 gjs,那么在终端中执行:
?
1

$ gjs

便可运行 gjs 解析器,然后我在其中输入了我的第一个 Hello world 程序:
?
1
2

gjs> print ("hello world");
hello world

可以将 "print ("hello world");" 字符串保存到 hello-world.js 文件中,然后在终端中执行:
?
1

$ gjs hello-world.js

这样便可执行一个独立的 JavaScript 脚本程序了。
导入 GNOME 模块

gjs 提供了 imports.gi 对象,使用它可以导入被 GObject Introspection(GI)认可的 typelib 二进制文件所关联的 GNOME 模块对应的 JavaScript 对象,然后 gjs 便可以访问底层基于 GObject 库实现的 C 程序库。看下面的示例:
?
1
2
3

const GLib = imports.gi.GLib;

print (GLib.get_home_dir ());

当使用 gjs 执行这个脚本程序时,便会在终端中输出 $HOME 的值。
如何知道哪些 GNOME 库已被 GI 化

现在,GNOME 桌面的大部分程序库皆已 GI 化,通常可在 /usr/lib/girepository-1.0 目录中看到它们,只要在该目录中的出现的 typelib 文件,其对应的库便可在 gjs 通过 imports.gi 对象进行连接。再举个导入 Clutter 库的例子:
?
1
2
3
4
5
6
7
8
9
10
11
12
13

const Clutter = imports.gi.Clutter;

Clutter.init (null, null);

let stage = Clutter.Stage.get_default ();

stage.title = "Test";
stage.set_color(new Clutter.Color({red:150, blue:0, green:0, alpha:255}));
stage.show ();

Clutter.main ();

stage.destroy ();
如何使用被 GI 化的 GNOME 库函数

上面那个导入 Clutter 库的示例中,出现了许多 Clutter 库函数的 JavaScript 版本,它们对应的 C 函数原型信息可从 /usr/share/gir-1.0 目录中的 gir 文件中查到。例如 Clutter.init() 函数在 Clutter-1.0.gir 文件中对应的信息如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26


...clutter_init 函数的描述信息...

a #ClutterInitError value



direction="inout"
caller-allocates="0"
transfer-ownership="full">
The number of arguments in @argv


direction="inout"
caller-allocates="0"
transfer-ownership="full"
allow-none="1">
A pointer to an array of arguments.







不知道 GNOME 开发者以后会不会为 gir 文件提供一个浏览器。现在如果使用 gjs 的话,只好自己去读这样的 xml 文件或者自行去解析。
剩下的事情

上述只是简略介绍一下 gjs 的基本用法。如果真的打算使用 gjs 来写 GNOME 3 桌面程序的话,那么不仅要熟悉 javascript,还要能够读懂 devhelp 中 glib, gtk+, clutter 等 C 库的文档。
参考资料

[1] GObject Introspection 的简单示例

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com






总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1