AppleScript 2.0 (2)

えっと、不具合報告でしたね。もとい、AppleScript 2.0 の変更点ですね。

AppleScript 2.0 のリリースノートが公開されていますが、日本語訳もせうぞーさんが公開してくださっています。ありがたいことです。

application オブジェクトが強化されています。running 属性が追加され、この属性でアプリケーションが起動しているかどうかの確認が行えるようになっています。

Script Editor で開く

if (running of application "Keynote") then
    activate application "Keynote"
else
    return "Keynote does not launch."
end if

この属性は対象アプリケーションが起動していなくても取得可能です。従来の AppleScript ではアプリケーションの情報を知りたい場合、そのアプリケーションを起動する必要があった(というか、勝手に起動してしまう)のですが、application オブジェクトが強化され、本当にアプリケーションの情報(用語辞書を参照するといった)が必要になるまで極力アプリケーションの自動的な起動を行いません。

Script Editor で開く

name of application "Pages"
--> "Pages"
version of application "Pages"
--> "3.0.1"

上記のようにアプリケーションの名前やバージョンを確認するのもアプリケーションを起動することなく行えます。また、アプリケーション固有の id 属性によるアプリケーションの指定も可能です。id はバンドルの識別子、もしくは 4 文字のクリエータータイプになります。最近ではクリエータータイプを持つアプリケーションも減ってきているのでバンドル識別子を利用する方がいいでしょう。

Script Editor で開く

name of application id "wrbt"
--> "iCal"
set appID to id of application "iCal"
--> "com.apple.iCal"
launch application id "com.apple.iCal"

コメントに # が利用できるようになりました。 一行コメントです。シャープが利用できるようになったのは、Unix の実行ファイルを考慮してのようです。スクリプトに #!/usr/bin/osascript を記述しておくことができるのですね。つまり、以下のようにしてターミナルからスクリプトを実行させることができます。

まず、テキストエディタなどで以下のスクリプトを記述し、適当な名前で保存します。ここでは、「Open」として保存しました。

#!/usr/bin/osascript

tell application "finder" to open desktop

ターミナルを起動し、保存したファイルに実行権限を与えます。

$ chmod +x Desktop/Open

続けて、ターミナルで Open をコマンドとして実行します。

$ ./Desktop/Open

Finder でウィンドウが表示されると思います。これは単純な例ですが、応用次第でいろいろできるでしょう。

osascript と osacompile の詳しいことは man にゆずるとして、従来 osacompile などで利用するテキストファイルはエンコーディングに UTF-8 を利用しなければいけなかったのですが、UTF-16 とプライマリエンコーディング(ユーザーの言語環境で利用されるエンコーディング)も利用できるようになりました。

また、osadecompile というコマンドも追加されています。これは、コンパイル済みスクリプトをテキストファイルに変換するコマンドです。欲しかったんです、これ。

osadecompile に引数としてコンパイル済みスクリプトファイルを渡すと、標準出力にテキストが表示されるので、リダイレクトしてファイルなどに保存するといいでしょう。

$ osadecompile Replace\ Item\ Names.scpt > tmp.applescript

Script Editor も少し強化されています。\t(タブ)、\r(ラインフィード)、\n(キャリッジリターン)を表示できるようになっています。従来は構文確認時に置き換わっていました。これは、Script Editor の環境設定から設定できます。

Script Editor の強化で一番便利なのが path to me が正しく保存したファイルのパスを返すようになったことでしょう。これで、バンドル形式の保存方法が利用しやすくなります。しかし、バンドル形式で保存したアプリケーションを再度 Script Editor で開くと「バンドルの内容」を表示できなくなるのはなぜでしょう。

以前からそうだったのですが、最初にスクリプトバンドルで保存しておきバンドルの中に様々なファイルを入れておいてからアプリケーションバンドルで保存するとバンドル内の入れておいたファイルが消滅する仕様はやめてほしいのですが、変わっていません。

用語説明で継承した親のプロパティを表示できるようになっています。これも環境設定で変更できます。ちょっと便利かな。もう少し、親の方のプロパティを区別して見やすくしてくれると、なおいいのですが。

しかし、AppleScript Language Guide が改訂されるとあるのに、未だに公開されていない。なぜでしょう。エラーメッセージもちゃんと返ってくるとあるけど、どことなく変な日本語。だけど、ないよりはいいでしょう。プロパティリストの読み書きができるようになっているけど、XML は相変わらず読むだけで書き込みできないですね。

システム環境設定の強化とあるからてっきりシステム環境設定が強化されたのだと思っていましたが、そうではなく System Events が強化され、システム環境設定の各設定を System Events から行えるようになっています。

しかし、System Events ってどこまで用語辞書が膨張すれば気が済むのでしょうか。

利用にあたって特別難しいことはなく、AppleScript: Scriptable System Preferences を参照すればほぼ理解できると思います(手抜き)。

0 件のコメント :

コメントを投稿