Gnome Extensions - 运行shell命令

时间:2017-04-11 22:41:38

标签: javascript linux shell gnome gnome-shell-extensions

我正在编写一个简单的扩展程序,通过单击扩展按钮来打开浏览器。我想知道是否有一个函数可以执行传递的shell命令作为参数。此外,如果有人可以为扩展开发提出一个很好的简单参考,那将非常有用。

2 个答案:

答案 0 :(得分:5)

来自https://github.com/GNOME/gnome-shell/blob/master/js/misc/util.js

// Runs @command_line in the background, handling any errors that
// occur when trying to parse or start the program.
function spawnCommandLine(command_line) {
    try {
        let [success, argv] = GLib.shell_parse_argv(command_line);
        trySpawn(argv);
    } catch (err) {
        _handleSpawnError(command_line, err);
    }
}

那里的方法有一些变化。保存自己的头痛,只需将GitHub存储库添加为书签。

一些快速链接:

  • popupMenu.js:使用弹出式菜单
  • panel.js:实施“托盘”图标的好读物
  • modalDialog.js:一些UI元素被重用,runDialog.js使用它作为例子
  • mpris.js:在gjs
  • 中也有使用像DBus这样的框架的好例子

我无法强调你读取gnome-shell源代码的余量。不幸的是,它现在被编译成一个资源文件,所以我们没有本地副本偶然发现。

答案 1 :(得分:0)

如果您对结果不感兴趣 - 即当您想打开浏览器窗口时 - 您可以像这样使用 GLib.spawn_command_line_async :

const GLib = imports.gi.GLib;
...
(this._menuEntries[i]).connect('activate', () => {
       GLib.spawn_command_line_async('firefox http://example.com?p='+ my_params[i]);
});

如果需要同步结果,请阅读https://gjs.guide/guides/gio/subprocesses.html