2013 年で 20 周年なんだってね。AppleScript。気づかなかったよ。だからというわけなのかどうか知らないけれど、OS X Mavericks 上の AppleScript 2.3 においていくつかの重要な機能が追加されました。
そのうちのひとつが、AppleScript Library。今までなかったのが不思議なぐらいなんだけど、やっとライブラリを簡単に取り扱える機能が言語ベースでサポートされました。
とは言うものの、あくまで機能としてサポートされただけで、最初から使えるスクリプトが付属しているわけではなく、ライブラリは自分で拡充していくしかないのですが。
なかなか手厳しい意見があったりもしますが、ともかく既存のスクリプトをライブラリとして手軽に活用できる環境が整いました。これをどう使うかはあなた次第。使い方は簡単。まずは使ってみましょう。
すでに AppleScript を活用していて自身でスクリプトを使い回している人なら、ユーザーの Library フォルダ以下に Script Libraries というフォルダを作成しましょう(~/Library/Script Libraries)。
このフォルダの中に既存のスクリプトを移動、または保存します。スクリプトはなんでもいいです。拡張子が scpt でありさえすれば(バンドル形式のスクリプトについては別途取り扱います)。
ここでは、次のようなスクリプトを保存してみましょう。
on finderSelection()
tell application id "com.apple.Finder"
return selection
end tell
end finderSelection
on filterByExtension(targetWindow, ext)
tell application id "com.apple.Finder"
return files of targetWindow whose name extension is ext
end tell
end filterByExtension
on selectItems(theseItems)
tell application id "com.apple.Finder"
ignoring application responses
set selection to {}
set selection to theseItems
end ignoring
end tell
end selectItems
on remove_filetype(the_file)
tell application "Finder"
set creator type of the_file to missing value
set file type of the_file to missing value
end tell
end remove_filetype
なんということもない Finder でよく使うハンドラの集まりです。このスクリプトを Finder Utilities という名前で保存します。
新しいスクリプトを作成します。
tell application id "com.apple.Finder"
set theseItems to script "Finder Utilities"'s finderSelection()
if theseItems is {} then return
set fileList to {}
repeat with thisItem in theseItems
set theWindow to container of thisItem
set ext to name extension of thisItem
if ext is not "" then
set fileList to fileList & script "Finder Utilities"'s filterByExtension(theWindow, ext)
end if
end repeat
script "Finder Utilities"'s selectItems(fileList)
end tell
Finder で選択しているファイルと同じ拡張子を持つファイルを全て選択するスクリプトです。Finder での並び順がバラバラだったりするのでちょっと重宝します。
実行するとなんの問題もなく動きます。当然ですね。では、解説。
先ほど Script Libraries に保存したライブラリスクリプトを他のスクリプトで利用するには次の書式を使います。
script "スクリプトファイル名"
スクリプトファイル名には拡張子は必要ありません。
script "Finder Utilities"
このような感じですね。ハンドラの呼び出しは通常の参照と同じです。finderSelection() というハンドラを呼び出したいなら、
finderSelection() of script "Finder Utilities"
または、
script "Finder Utilities"'s finderSelection()
となります。
AppleScript に慣れている人なら戸惑うこともないでしょう。もちろん、引数も通常どおり渡せます。
あっけないぐらい簡単にライブラリを利用できます。この書き方は冗長なので次のようにすることも可能です。
property FinderUtilities : script "Finder Utilities"
FinderUtilities's finderSelection()
これも新しく追加された use を使って次のように書くこともできます。
use FinderUtilities : script "Finder Utilities"
FinderUtilities's finderSelection()
これらの書式すら冗長なら parent に指定することもできます(なんでもかんでも parent に指定するのは、どうかと思いますが)。
property parent : script "Finder Utilities"
finderSelection()
It's Amazing!! Let's biginning the AppleScript!!!
ってそれほどでもないか。
まぁ、既存のスクリプトを手軽に扱えるようになったのはいいことでしょう。いろんな意見もあることでしょうが、こういうものはないよりはましです。気になること(例えば、ライブラリスクリプトからライブラリを利用できるのか?等)もあるでしょうが、そういったことはまた次回にでも。Coming Soon!!
0 件のコメント :
コメントを投稿