EVENTで*stopを使うと、*linecustと相性が悪い場合があるので、代わりに*gotoを使う話です。
問題意識
FIRSTEVENTやLOADEVENTで、*ifmatchと*stopを使って条件分岐をすることは、よくあることだと思う。以下はPPC起動時に、IDが[A]ならhogeを、それ以外ならfugaをメッセージ表示する設定。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *stop
*linemessage fuga
}
これだと、後で別の設定を*linecustで追加しようとした時、困ったことが起きる。例えば、PPC起動時にメッセージウインドウを表示しようとして、以下のコマンドを実行したとする。
*linecust homu,KC_main:FIRSTEVENT,%%I"hello world"
すると、FIRSTEVENTは以下のようになる。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *stop
*linemessage fuga
%mhomu %I"hello world"
}
これでは、想定した通りの動きにならない。起動したPPCのIDが[A]の時、一行目で処理が止まるからだ。手動で処理の順序をいじったりすれば解決するかもしれないが、そういうややこしいことはできればしたくない。
*stopの代わりに*gotoを使う
*stopの代わりに*gotoを使えば、この問題は解決しそうだ。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *goto Last
*linemessage fuga
%mLast
}
これなら、*linecustで追加した処理が無事実行されることになる。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *goto Last
*linemessage fuga
%mLast
%mhomu %I"hello world"
}
*linecustが使いやすくなる分だけ、*stopよりも*gotoの方が少しお得。これがホントのgoto EVENTってやつですねw
:y=-( ゚д゚)・∵;; ターン
0 件のコメント:
コメントを投稿