如果我想通过 GNOME shell 扩展访问它下面的 REST API,我将如何从浏览器环境移植 OAuth 2.0 隐式授权流?如何通过登录屏幕将用户重定向到 OAuth 2.0 决策端点?
如果 OAuth 2.0 REST API 无法通过其他方式将 Web 服务与 shell 扩展集成?
我想通过我的 shell 扩展支持多个 GNOME 版本。如何检测它运行的 GNOME 版本并适当地分支代码?
将myexentension@me.com文件夹复制到后,.../gnome-shell/extensions/我在终端上执行以下命令:
gnome-shell-extension-tool -e myexentension@me.com
然后,我用Alt+ 重新启动会话F2并执行r,一切正常。
但是我只能通过命令行启动扩展程序吗?没有Alt+ F2+ r吗?不重新启动我的gnome-shell会话?
我正在 GJS 中开发 GTK 应用程序,并且喜欢在 Gnome Shell 扩展中重用部分 GTK 代码。但是,我没有找到将
Gtk.Widget图标添加到 Gnome Shell 面板菜单的方法。
我尝试使用GtkClutter.Actorfrom clutter-gtk,但该库似乎已经过时,并且在 Wayland 或 X11 Gnome Shell 中都不起作用,因为它需要 Clutter1.0但看到7已经加载。imports.gi.GtkClutter在扩展中导入时
,Gnome Shell 会产生以下错误:
Requiring GtkClutter, version none: Requiring namespace 'Clutter' version '1.0', but '7' is already loaded。
这里有一些代码来演示clutter-gtk如果直接通过 ; 运行它的话,它实际上是有效的gjs。可能是因为我可以在这里强制执行 GTK 3.0。
gtkclutter.js:
imports.gi.versions.Gtk = '3.0' // fails if set to 4.0
const { Gtk, GLib, Clutter, GtkClutter } = imports.gi
// …Run Code Online (Sandbox Code Playgroud) 我正在开发Gnome Shell扩展程序,但找不到任何有关如何将字符串复制到剪贴板的文档。
我搜索了Gnome扩展git,但没有成功。
谢谢您的帮助!:)
我一直在与可怕的 Gnome API 文档作斗争,并提出了这个扩展:
const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const GLib = imports.gi.GLib;
let label;
function init() {
label = new St.Bin({ style_class: 'panel-label' });
let stuff = GLib.spawn_command_line_sync("cat /home/user/temp/hello")[1].toString();
let text = new St.Label({ text: stuff });
label.set_child(text);
}
function enable() {
Main.panel._rightBox.insert_child_at_index(label, 0);
}
function disable() {
Main.panel._rightBox.remove_child(label);
}
Run Code Online (Sandbox Code Playgroud)
这应该读取hello文件中的任何内容并将其显示在顶部面板中。但是,如果我更改了hello文件的内容,则必须重新启动 Gnome 才能显示新内容。现在,肯定有一种方法可以动态执行此操作,但我在文档中找不到任何内容。面板中的消息基本上应该始终反映文件中的任何内容。任何想法如何做到这一点?
我正在为Gnome 3.4开发一个gnome shell扩展.如果任何可编辑文本聚焦在/进出,我的扩展需要捕获窗口事件.
global.stage.connect('notify::focus-key', Lang.bind(this, this._myHandler));
Run Code Online (Sandbox Code Playgroud)
不适合我.
这是一个简单的用例:每当用户点击firefox搜索框时,我都希望运行我的处理程序.
谢谢你的帮助,
我认为应该使用D-Bus.基本上,我想要这样的东西 - https://wiki.gnome.org/Gjs/Examples/DBusClient - 但反过来说.
在扩展中,会有一个功能:
function f(s) { doSomethingWithS; }
Run Code Online (Sandbox Code Playgroud)
运行后会调用此函数:
$ <something> "abc"
Run Code Online (Sandbox Code Playgroud)
...在终端,有s == "abc".
之后从@Jasper和@owen在建议#gnome-shell上irc.gnome.org,我改编自一些代码https://github.com/GNOME/gnome-shell/blob/master/js/ui/magnifierDBus.js:
const St = imports.gi.St;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main;
let text;
function init() {
text = new St.Label({ text: "0:0", style_class: 'panel-text' });
}
function enable() {
Main.panel._rightBox.insert_child_at_index(text, 0);
}
function disable() {
Main.panel._rightBox.remove_child(text);
}
const TextInTaskBarIface = '<node> \
<interface name="com.michalrus.TextInTaskBar"> \
<method name="setText"> \ …Run Code Online (Sandbox Code Playgroud) 我正在尝试仅使用 JavaScript 编写扩展程序。我通过 Hello World 用 Python 写的!代码。但是,一开始,我的菜单项按钮不起作用。此外,我无法使用 Hello World 添加菜单项!代码。我想,我想念一些东西。
按钮代码在这里:
const Lang = imports.lang;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const St = imports.gi.St;
const TimeButton = new Lang.Class({
Name: "Salah Time",
Extends: PanelMenu.Button,
_init: function () {
let box = new St.BoxLayout({
style_class: "system-status-icon"
});
let label = new St.Label({text: "Salah Time"});
box.add_child(label);
this.actor.addActor(box);
}
});
function init() {
}
function enable() {
let but = new TimeButton();
Main.panel._leftBox.insert_child_at_index(but, 1);
} …Run Code Online (Sandbox Code Playgroud)我正在编写一个简单的扩展程序,通过单击扩展程序按钮来打开浏览器。我想知道是否有一个函数可以执行传递的shell命令作为参数。另外,如果有人可以为扩展开发提供一个很好的简单参考,那将真的很有帮助。
gnome ×4
javascript ×4
gjs ×3
gnome-shell ×3
gnome-3 ×2
shell ×2
bash ×1
clutter ×1
code-reuse ×1
copy ×1
dbus ×1
gtk ×1
linux ×1
oauth2client ×1
rest ×1