Curl Global Community

Full Version: Sonntag でCommand を呼び出す
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Sonntag で、Command で定義した処理をイベントとして呼び出すときには、

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

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

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

アチョー。
内部的にはScreenクラスはCommandContextで、define-screen-commandで定義されるのはそのCommandImplです。do-command以外にも、CommandContextのメソッドはすべて使えます。
Sonntagの設計者にも聞いてみましたが、Command に引数を渡したり、戻り値をもらったりはできないんですね。

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

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