1

i3 で dzen2 をセットアップするために node.js を使用してスクリプトを作成する作業を行っていますが、このような目的でノードを実際に使用したことはありません。

まず、画面のジオメトリが必要です。これは、次のようなもので取得できます。

geometry = getGeo();

function getGeo() {
  var sh = require('child_process').exec("i3-msg -t get_outputs",
    function(error, stdout, stderr) {
      var out = JSON.parse(stdout);
      return out[0].rect; //this is the geometry, {"x":0, "y":0, "width":1280, "height":768}
  });
};

console.log(geometry);

console.log は未定義のログを記録しています。

これを行う適切な方法が何であるかわかりません。私の脳は疲れています。

4

2 に答える 2

3

は非同期であるため、コールバック関数から戻ることはできません。代わりに別の関数を作成し、コールバック オブジェクトをそれに渡します。

function getGeo() {
var sh = require('child_process').exec("i3-msg -t get_outputs",
    function(error, stdout, stderr) {
      var out = JSON.parse(stdout);
      getRect(return out[0].rect);
    });
};

function getRect(rect) {
    // Utilize rect here...
}
于 2012-06-23T02:28:29.303 に答える
0

getGeo() から値を返すことはありません。その中の無名関数から関数を返しています。ただし、.exec() 呼び出しの非同期性のため、値を返すことはできません。console.log をコールバック関数に入れることができますが、それは実際のプログラムで使用したくない場所かもしれません。

于 2012-06-23T02:20:25.520 に答える