ofxCLIを作った
ofxCLIというaddonを作ったので紹介
ことの始まり
ターミナルとかコマンドプロンプトみたいな形式でキー入力を行ごとに受け付けるoFのaddonを探してたんだけど、もしかしてない?
— 岩谷成晃 (@nariakiiwatani) November 30, 2019
絶対誰かofxCLIとかofxCUIみたいなの作ってると思ったんだけど・・・。
できること
1行テキストエディタ
このgifでは改行してるように見えるけど、実際は履歴に溜めてるだけで、戻って編集はできない。
カーソル移動の操作や仕様はXcodeのエディタの挙動を参考にした。
(Option押しながらで単語ごと、Command押しながらで行全体の移動)
上下キーで履歴を辿れる。
TABキーで、バインディング(後述)されてる候補を表示できる。
関数バインディング
prompt_.subscribe("bgcolor", [](float r, float g, float b, float a) {
ofBackground(ofFloatColor(r,g,b,a));
}, {0,0,0,1});
こんな感じで登録するとbgcolor [r,g,b,a]
でofBackgroundを呼べる。
ちなみに登録時の引数{0,0,0,1}
は指定しなかった場合のデフォルト値(省略可)。
ラムダ関数、メンバ関数、std::function
が登録可能。
変数バインディング
prompt_.subscribe("textcolor", text_color_.r, text_color_.g, text_color_.b, text_color_.a);
void ofApp::draw() {
ofPushStyle();
ofSetColor(text_color_);
prompt_.drawDebug(0,10);
ofPopStyle();
}
こんな感じで登録するとtextcolor [r,g,b,a]
でテキストカラーを変えられる。
デフォルト値は登録時の値になる。
OSCバインディング(Receive)
ofx::cli::Prompt prompt_;
ofx::cli::BindOscReceiver osc_receiver_;
void ofApp::setup() {
prompt_.subscribe("print", [](std::string s) { std::cout << s << std::endl; });
osc_receiver_.bind(prompt_);
}
こうしておけば、アドレス/print
に飛んできたOSCメッセージの第一引数をコンソールに表示する。
※先頭のスラッシュの有無は設定可能
※デフォルトのポートは6000番(変更可能)
OSCバインディング(Send)
ofx::cli::Prompt prompt_;
ofx::cli::BindOscSender osc_sender_;
void ofApp::setup() {
prompt_.subscribe("print", [](std::string,int){});
osc_sender_.bind(prompt_);
}
こうしておけば、print
に続けて打ち込んだ内容がOSCで送信される。
例えばprint a 3
だったらアドレス/print
に文字列s
と整数3
が送られる。
もしprint
がsubscribeされてなかった場合は変数の型が全てstringになる。
※先頭にスラッシュを付与するかどうかは設定可能
※デフォルトの送信先はlocalhost:6000
(変更可能)
※subscribeしてるコマンドしか送らない設定も可能
※subscribeしてないコマンドしか送らない設定も可能
応用
Prompt::proc(const std::string&)
Prompt::proc(const std::string &program, const std::vector<std::string> &args)
Prompt::proc(const std::string&)
Prompt::proc(const std::string &program, const std::vector<std::string> &args)
Promptに直接打ち込まなくても、これを使えば外部から直接コマンドを叩ける。
subscribeを呼び出すコマンドを登録しておけばoFとofxCLIの上で自作のスクリプト言語を動かすみたいなことも可能・・・?(知らんけど)
Author And Source
この問題について(ofxCLIを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/nariakiiwatani/items/a03675301fc9ad402dd6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .