idleTaskで自動入力


先日、鯵さんの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();

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

広告

idleTaskで自動入力」への1件のフィードバック

  1. ピンバック: InDesign:あっちこっちに同じ文字を何度も何度も何度も何度も打つ時にすごい便利なやつ / 車車車く本牛勿 -Rollin' Real-

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中