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
|
<
function
name
=
"init"
c:identifier
=
"clutter_init"
>
<
doc
xml:whitespace
=
"preserve"
>...clutter_init 函数的描述信息...</
doc
>
<
return-value
transfer-ownership
=
"none"
>
<
doc
xml:whitespace
=
"preserve"
>a #ClutterInitError value</
doc
>
<
type
name
=
"InitError"
c:type
=
"ClutterInitError"
/>
</
return-value
>
<
parameters
>
<
parameter
name
=
"argc"
direction
=
"inout"
caller-allocates
=
"0"
transfer-ownership
=
"full"
>
<
doc
xml:whitespace
=
"preserve"
>The number of arguments in @argv</
doc
>
<
type
name
=
"gint"
c:type
=
"int*"
/>
</
parameter
>
<
parameter
name
=
"argv"
direction
=
"inout"
caller-allocates
=
"0"
transfer-ownership
=
"full"
allow-none
=
"1"
>
<
doc
xml:whitespace
=
"preserve"
>A pointer to an array of arguments.</
doc
>
<
array
length
=
"0"
zero-terminated
=
"0"
c:type
=
"char*"
>
<
type
name
=
"utf8"
c:type
=
"char"
/>
</
array
>
</
parameter
>
</
parameters
>
</
function
>
|
不知道 GNOME 开发者以后会不会为 gir 文件提供一个浏览器。现在如果使用 gjs 的话,只好自己去读这样的 xml 文件或者自行去解析。
剩下的事情
上述只是简略介绍一下 gjs 的基本用法。如果真的打算使用 gjs 来写 GNOME 3 桌面程序的话,那么不仅要熟悉 javascript,还要能够读懂 devhelp 中 glib, gtk+, clutter 等 C 库的文档
摘自
->> http://garfileo.is-programmer.com/posts/29644.html
今天的文章 Gjs编程及调用底层库原理分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84517.html