2016-12-01 7 views
1

Le développement d'extensions pour GNOME Shell implique principalement l'utilisation d'API C via GObject Introspection. Cela signifie que la plupart des choses réalisables avec C peuvent aussi être faites en JavaScript. But there are some cases, where features of the C APIs cannot (yet) be reproduced through the introspection bindings. Il serait utile de pouvoir combler ces lacunes avec du code C natif. Une extension GNOME Shell peut-elle inclure des composants binaires créés à partir du code C?Ajout de composants binaires dans une extension GNOME Shell

Si oui, comment sont-ils intégrés?

Répondre

0

J'ai la même question. Je n'ai pas encore trouvé un bon moyen de le faire. Actuellement, je suis en train 2 approches non idéales pour le faire:

  1. Code dur le chemin, .: par exemple ~/.local/share/gnome-shell/extensions/[email protected]/mybinary
  2. Installez le binaire au niveau mondial et indépendant de l'extension.

Une fois que vous avez le chemin que vous pouvez par exemple utiliser Util.spawnCommandLine:

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

Ou GLib.spawn_async si vous avez besoin d'un rappel:

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); 
    } 
}); 

La pièce que je suis absent est s'il y a un moyen d'obtenir le chemin d'extension en quelque sorte via une méthode d'assistance. Mais les docs sont terriblement sous-développés et la navigation dans le code source ne m'a pas encore trouvé la solution.