Curl Global Community
Sonntag でCommand を呼び出す - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: Sonntag でCommand を呼び出す (/showthread.php?tid=156)



Sonntag でCommand を呼び出す - umemura - 07-25-2011

Sonntag で、Command で定義した処理をイベントとして呼び出すときには、

CommandButton のなかで bind-screen-command を使えばいいのは分かったのですが、

バインドさせずに、たとえばコンストラクタのなかで呼び出す場合には、どうすればよいのでしょうか。



RE: Sonntag でCommand を呼び出す - umemura - 07-25-2011

Sonntag 設計者に聞いて解決しました。

Screenクラス内で {self.do-command "コマンド名"} で実行できました。

アチョー。



RE: Sonntag でCommand を呼び出す - fukuta - 07-25-2011

内部的にはScreenクラスはCommandContextで、define-screen-commandで定義されるのはそのCommandImplです。do-command以外にも、CommandContextのメソッドはすべて使えます。


RE: Sonntag でCommand を呼び出す - umemura - 07-26-2011

Sonntagの設計者にも聞いてみましたが、Command に引数を渡したり、戻り値をもらったりはできないんですね。

Screen のフィールドを使って格納したり、参照したりするのが基本的スタンスという理解です。




RE: Sonntag でCommand を呼び出す - fukuta - 08-02-2011

Command がパラメータを扱う場合は CommandImpl.prepare や CommandImpl.prompt を正しく実装するというのがCommand 本来の作法のようです。(詳しくは CommandImpl の APIリファレンス参照)
ただし Sonntag でスクリーンコマンドを定義するための define-screen-command はこれらの実装を定義できるようになっていないため、実行時の処理の一環として Screen から値を取得したりする必要があります。