idleTaskで自動入力

[youtube https://www.youtube.com/watch?v=jRVzRUCeio4]
先日、鯵さんのIDのインサーションポイント切り替えるたびに自動で特定の文字挿入したいってやつをプラグイン作ったら?で流したのですが、その後色々と考えていました。まあ、普通の手段では対応不可能なのはご存知のとおりです。あれこれ脳内エミュレータに仕事をさせて有効な手法はないものか探していました。そんなものがさっと出てくるのなら苦労はしませんよね?

で、休日の朝の事です。起きがけに思いつきました。アイドルイベントをず〜っと再帰で回しちゃえばいいじゃんwって。そのままオフトゥンの中でうだうだ脳内エミュレータでステップインしていました。完璧です。素晴らしいwww
そして、そのまま二度寝しました。

で、先程書いたのがこちらです。珍しく一発で動きました。エミュレータはなかなか優秀なようです。

#targetengine session
var ps;
if (app.selection[0].toString().indexOf(InsertionPoint)>-1) ps = app.selection[0].index;
else ps = 0;
 var idleTask = app.idleTasks.add({name:'insertCharacter', sleep:250})
 .addEventListener(IdleEvent.ON_IDLE, task1);

function task1(ev){
 app.idleTasks.everyItem().remove();
 if (app.selection[0].index!=ps){
 app.selection[0].contents = "@";
 ps = app.selection[0].index;
 }
 idleTask = app.idleTasks.add({name:'insertCharacter', sleep:250})
 .addEventListener(IdleEvent.ON_IDLE, task1);
 }

説明する程のものではありませんが、idleTaskの利用方法自体はこの定形で利用すると良いでしょう。メソッドをチェーンしていますが、別々にしても全く問題ありません。
sleepパラメータはmsです。この例の場合、1/4秒毎にIビームの位置をチェックし、変わっていたらそこに「@」を挿入するという動作をします。変わっていてもいなくても次の1/4秒後に再チェックする為のidleTaskをスケジュールしておしまい。と言った流れです。
テストする場合はIDのテキストフレームを選択した状態かIビームをピコピコさせた状態でこのスクリプトを走らせます。
永久にタスクをスケジュールし続けますので停止する必要があります。テキストフレーム自体の選択を外すとエラーが発生して停止できますが、以下のスクリプトを利用するのがスマートでしょう。

app.idleTasks.itemByName("insertCharacter").remove();

最後に、睡眠大事です(^-^;

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

1件のコメント

コメントを残す