Illustratorのスクリプティングはやったことがある人は分かると思うんだけど、結構穴があります。
普通に使っている機能がプラグインとして搭載されている関係上、スクリプトで制御できない部分が多数あります。
そんなときは素直にあきらめるべきだとは思うのですが、どうしてもスクリプトでどうにかしないと終わんない!とか言うときに試みてもいいかなっていう手法があります。
先日書いた[Illustrator][AppleScript]テキストのアウトラインの中でちょっとだけ紹介した「GUIスクリプティング」という手法になります。
あんまり好きな手法ではないのですが、便利だとは思うので紹介してみます。
この手法はSystem Eventsに命令を出して処理を行わせるものです。
AppleScriptでGUIを操作する為の機構らしいです。
そうなの?
System Eventsを利用するためには必ず「システム環境設定->ユニバーサルアクセス->画面表示->補助装置を使用可能にする」にチェックを入れておく必要があります。
変なところを変更するとMacが急にしゃべりだしてかなりビビるから試してみてもいいと思うよ!w
で、Syetem Eventsでなにができるかっていうといろんなことができるっぽいです。
今回紹介するのはその中でもわかりやすい「キーを押させる」命令です。
要は「コマンド+Aを押して」と命令したら自分で押さなくてもコマンド+Aを押してくれるのです。
「え?そんだけ?」とか思うでしょ?
でもちょっと考えてみてください。
Illustratorにはキーボードショートカットを編集できる機能がついていますよね?
その機能を使ってスクリプトに対応していない機能にショートカットを割り当て、そのショートカットを押させること、スクリプト上からスクリプトに対応していない機能を実行することが可能になるのです。
例として「アピアランスの分割」をやってみましょう。
一連の動作を動画にしてみたので参考にしてください。
まずアピアランスの分割にショートカットとしてコマンド+9をセットします。
続いてスクリプトを起動すると、System Eventsがコマンド+9を押して、先ほど設定したショートカットを実行します。
するとアピアランスの分割が実行されて、ちゃんとアピアランスが分割されます。
使用したスクリプトはこちら。
--前提条件としてIllustratorのアピアランスの分割にショートカット(cmd+9)を割り当てているtell application "Adobe Illustrator"
tell document 1
set selected of every page item to true --全選択
activate
--delay 1--うまく動かないときはディレイして様子をみる必要がある
tell application "System Events"
keystroke "9" using (command down)
end tell
end tell
end tell
これだけです。
ただこのとても便利なGUIスクリプティング、私はあまり使いません。
大きな理由として「処理が遅い」。
上記のような処理であればすぐ動きますが、何回もキーを押させたりすると、結構遅いです。
続いて「タイミングを合わせるのが難しい」。
上記スクリプトにエスケープしてある「delay 1」という一文があると思います。
これは1秒待てという指示なんですが、場合によってはこの命令を随所に差し込んで処理待ちさせる必要があります。
簡単に言うとGUIスクリプティングより前に書かれた処理を追い抜いて実行されたりするんです。
そのため「あなたの出番はもう少し後ね」と教えてあげないといけないのです。
これがめんどくさい。
非常にめんどくさい。
ホントめんどくさい。
上記のような理由で私はGUIスクリプティングを使わないようにしています。
あとはOSのバージョンがあがったときにちゃんと動くのかなーとか、コードを見た人が分かりづらいものを書くのは嫌だなーとかそんな理由もあります。
でも便利な機能ですし、使い方の問題だと言われちゃうと思ったので、ブログに書いてみました。
先日書いた[Illustrator][AppleScript]テキストのアウトラインに上記のスクリプトを書き加えればアピアランスの分割は実装できますね。
そのうちアップします。
が、この機能を追加したことでうまく動かなくなる可能性も飛躍的にあがるので、その辺りは自己責任で試してみてください。