2016-12-01 10 views
1

GNOMEシェルの拡張機能の開発には、主にGObjectイントロスペクションによるC APIの使用が含まれます。つまり、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); 
    } 
}); 

がある場合、私は欠けている部分があります何とかヘルパーメソッドを使って拡張パスを取得する方法です。しかし、ドキュメントはひどく開発されておらず、ソースコードを閲覧しても私には解決策がまだ見つかりませんでした。

関連する問題