问题标签 [gjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gnome-shell - 是否可以在 Gnome Shell 环境之外导入 Gvc 类型库?
我想使用GJS中 Gnome Shell GIR 中使用的 Gvc ( libgnome-volume-control ) ,但除了在 Gnome Shell 环境中(例如 Gnome Shell 扩展)之外,找不到访问它的方法。实际上,我什至无法弄清楚它在哪里。这可能吗?
更新
根据 Philip Withnall 的评论(关于 hacky 解决方法),我发现可以像这样导入:
segmentation-fault - 为什么我的 Gdk/cairo 类会导致段错误?
我编写了一个小类来从 base64 编码的 JPEG 字节数组创建一个圆形图像,但它似乎经常导致段错误。这是我能找到的在 GJS 中创建 cairo 表面的最简单方法,尽管我不反对 Clutter,如果它解决了我的问题。
CairoImageSurface 似乎没有破坏函数或信号,我尝试取消 pixbuf 以查看是否有帮助,但这会导致错误:
GLib-GObject-WARNING **:g_object_remove_toggle_ref:找不到切换参考 0x7f45456b19e0((nil))
我在一个简单的 Gtk 窗口中使用了它并且它可以工作,但它似乎会导致大约一半的时间段错误。我对内存管理知之甚少,因为我通常使用垃圾收集语言,所以我只假设这与我没有释放的内存有关。
有没有什么明显的我做错了,更简单的方法来做这个杂乱或简单的方法我可以追踪任意段错误?
glib - 在 GJS 中编写本机消息传递主机
我正在尝试为 GJS 中的 chrome/firefox 扩展编写本机消息传递主机(因为它将依赖已经用 GJS 编写的代码),但遇到了一些障碍。我使用chrome-gnome-shell作为粗略模板,因为它还使用 GLib/Gio 自省和 GApplication,但它具有struct
我没有的 python 优势。
很快,本地消息传递主机通过 stdin/stdout 交换消息,这些消息是 Int32(4 字节)长度,后跟一串 utf-8 编码的 JSON。
chrome-gnome-shell 使用GLib.IOChannel
withset_encoding('utf-8')
和struct
来处理 int32 字节。我在 GJS 中使用该类时遇到了麻烦,并且没有struct
尝试使用/和/Gio.UnixInputStream
包裹Gio.DataInputStream
(和输出对应物)。put_int32()
read_int32()
put_string()
read_string()
显然,我对自己在做什么感到非常困惑。如果我调用Gio.DataInputStream.read_int32()
它返回一个数字369098752
,所以我猜测 int32 没有被转换为常规数字。如果我打电话Gio.DataInputStream.read_bytes(4, null).unref_to_array()
得到一个字节数组;ByteArray.toString()
返回 '\u0016' 而 ByteArray[0] 返回似乎是实际长度的 '22'。
一些关于读取/写入 int32 到数据流的指针,将不胜感激。
chrome-gnome-shell 参考:
javascript - gjs中的异步代码在调用回调之前退出
当我尝试运行异步代码(例如读取文件或发送 http 请求)时,程序会在调用回调之前立即退出。
javascript - 如何检查 Gnome/gjs/Gio 中的错误代码
这不起作用(目录存在时不会发生任何事情):
gnome-shell - 如何通过名称获取 Clutter.Actor
我正在使用 GJS,我如何Clutter.Actor
通过它的名称获得。例如,如果我想获得 GNOME Shell 的顶部面板,我如何Clutter.Actor
通过它的名称“面板”获得它?
我的研究最终在某个地方Clutter.Stage
可以附加 Actor(s),但是根据我的看法,可以有多个 Stages 设置,所以我可能还必须找到我想要的 Actor 是哪个 Stage找到在。现在我想知道如何通过名称获取 Actor。
我从代码中看到了;Main.layoutManager.panelBox
获取 GNOME Shell 的顶部面板,但这似乎不适用于我的情况,因为它是我想要获取的第三方 Actor,并且我希望获取 Actor(s) 的方式是通过名称,因为我可能正在工作与不同的第三方参与者。
我知道有一种方法可以得到这个;Main.layoutManager.panelBox.get_parent().get_children()
我可以通过它的索引获得特定的演员,但我认为这不是解决这个问题的最佳方法,考虑到事物的动态性,其次,我觉得这种方式有点草率所以..
我能够通过窥镜获得名称(Alt + F2 -> lg -> 选择器)。目前,我想要获取的特定 Actor 是 DashtoDock,仅供参考。
谢谢~希望有人能帮忙。
gnome-shell - 如何测试我的 GNOME Shell 扩展而不会有使 shell 崩溃的风险?
在开发过程中,我向我的扩展程序引入了一个错误,该错误导致gnome-shell
在尝试加载扩展程序时崩溃,并带有以下相当宽泛的错误消息:
能够在
- 获取描述性错误消息,告诉我错误的实际位置
- 不会冒险破坏整个外壳
这可能吗?
我已经搜索了gnome-shell
和gjs
repos 以尝试找到改进错误消息的方法。我发现三个调用站点发出带有前缀的错误,但在 GJS 中Execution of main.js threw exception:
找不到实际调用。JS_EvaluateScript
我也尝试gjs
像这样运行我的扩展:
但gjs
抱怨
虽然St-1.0.typelib
确实位于/usr/lib/gnome-shell
我知道我可以使用 LookGlass 来评估一些 JS 字符串。
我知道该错误是由St
使用无效参数调用本机代码 () 引起的。
gtk - 如何从 gjs 中的 Gtk.Context 中缩小窗口按钮
我正在尝试从当前 gtk 活动主题中提取 windows 按钮并将其呈现在 gjs 中的 cairo 上下文中,以用于 Gnome-Global-Menu ( https://gitlab.com/lestcape/Gnome-Global-应用菜单)。例如,我有一个代码用于提取关闭按钮。
这是我的第一个近似值,但它不起作用。我检测到 Ambiance 主题中的 css 是这样的:
生成我的代码的路径具有以下格式:
发生这种情况是因为 gjs 中 Gtk.Button 的 GType 返回我 GtkButton 而不是按钮,就像在主题中一样。所以,我创建了一个助手类:
然后代替:
我加:
然后我的路径和 css 属性匹配,但在我的 cairo 上下文中也没有显示任何内容。绘图区域的宽度和高度是 gnome shell 面板的大小 27 像素。
那么,这里缺少什么?
另一方面,如果我直接从 Gtk.widgets 获得我想要的上下文,那么它正在工作:
使用最后一个代码实现的示例在这里:https ://gitlab.com/lestcape/metacity-buttons并且可以在这里看到显示它工作的视频:https://www.youtube.com/watch?v=7CnoMEM44Do&t =18s
gtk - Clutter.Text 的 set_editable() 似乎不起作用
Clutter.Text
我正在尝试使用'方法创建一个可编辑的多行文本框set_editable()
:
但这似乎不起作用。我错过了什么?这是使用上面代码的简化版extension.js
:
作为脚注,Gtk.TextView看起来正是我所需要的,但我无法弄清楚如何将它集成到 PopupMenu。任何想法?
javascript - 在开发 Gnome Shell 和扩展时我应该使用 ES6 还是 Lang 类?
我正在开发一个简单的 gnome shell 扩展,在HACKING.md
gnome shell repo 中,它说我们应该使用new Lang.Class()
语言框架来初始化一个类。
但是,当我查看官方 gnome-shell 扩展存储库示例时,每个扩展都使用 es6 类语法,而不是new Lang.Class()
.
所以,我的问题是:我应该对 shell 扩展使用 es6 类语法并使用new Lang.Class()
框架为 gnome-shell 本身做贡献吗?另外,我在哪里可以获得有关 gnome-shell 是什么架构以及我可以使用的完整 api 的更多信息?我搜索谷歌,所有信息似乎都已损坏或过时,这对于像我这样天真的人来说非常失望。
谢谢你。