2016-12-01 12 views
1

Разработка расширений для оболочки GNOME в основном предполагает использование API-интерфейсов C через GOrosject Introspection. Это означает, что большинство вещей, достижимых с помощью C, можно сделать и в JavaScript. But there are some cases, where features of the C APIs cannot (yet) be reproduced through the introspection bindings. Было бы полезно уметь преодолевать эти пробелы с помощью собственного кода C.Включение двоичных компонентов в расширение оболочки GNOME

Может ли расширение оболочки GNOME включать двоичные компоненты, созданные из кода C? Если да, то как они интегрируются?

ответ

0

У меня такой же вопрос. Пока не нашли хорошего способа сделать это. В настоящее время я пытаюсь 2 неидеальных подходов сделать так:

  1. жесткого кодом путем, например .: ~/.local/share/gnome-shell/extensions/[email protected]/mybinary
  2. Установите бинарный глобально и независимо от расширения.

После того, как у вас есть путь, который вы можете, например, использовать Util.spawnCommandLine:

const Util = imports.misc.util; 
Util.spawnCommandLine('/path/to/your/bin'); 

Или GLib.spawn_async если вам нужен обратный вызов:

const GLib = imports.gi.GLib; 
let [success, pid] = GLib.spawn_async(null, 
    ['/path/to/your/bin', '--param1','--param2'], 
    null, 
    GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, 
    null); 

if (!success) { 
    global.log('ERROR NO SUCCESS'); 
    return; 
} 

GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function (pid, status) { 
    GLib.spawn_close_pid(pid); 

    if (status !== 0 && status !== '0') { 
    global.log('ERROR'); 
    } 
    else { 
    global.log('SUCCESS', status); 
    } 
}); 

Кусок я пропускаю, если есть способ получить путь расширения каким-то образом с помощью вспомогательного метода. Но документы ужасно недоразвиты, и просмотр исходного кода еще не нашел меня решением.

 Смежные вопросы

  • Нет связанных вопросов^_^