Xcode 2.1

Xcode 2.1 がダウンロードできますが...。752 MB って巨大です。このバージョンから Shell Script Automator Action なるものが作成できるようになっていますね。

AppleScript のアクションとはまた違い、シェルスクリプトを実行するアクションです。これでいまいち盛り上がらない Automator が少しでも盛り上がってくれるといいのですが。

Xcode 2.1 とともにリファレンスにもいろいろと追加されていますね。Automator Programming Guide は、AppleScript で作成するアクションの手っ取り早い入門書ですが、Cocoa バインディングの部分にも多少の解説が割かれているので、Cocoa バインディングを知らない人にとって参考になるかも。

Safari の選択文字列

Mac OS X 10.4 の Safari 1.3 で選択文字列を取得するスクリプトが動かなくなっていました。Safari のセキュリティが強化された結果らしいのですが。

Safari のスクリプティングって結局のところ JavaScript なんですが、選択文字列の取得は do JavaScript で行っていたんです。で、Safari 1.3 は、JavaScript の脆弱性に対処がなされているようで、このスクリプトを使っても空文字列しか返ってこないのです(Mac OS X 10.3.9 の頃からのことですが)。

いろいろと探してみると、やっぱり JavaScript を使うのですが、選択文字列を取得する方法がありました。

Script Editor で開く

tell application "Safari"
    set selectedText to ""
    if exists front document then
        set selectedText to do JavaScript "getSelection()+''" in front document
    end if
    return selectedText
end tell

何が違うのかがよく分かっていないのですが。分からないので JavaScript について調べる。JavaScript 使えば、画像もリンクも簡単に見つけられる、ということに今更気づく...。

QuickTime File Suite

System Events に QuickTime File Suite なるものが新しく追加されていて、これを使えば QuickTime Player を起動しなくても動画や音声ファイルについて色々調べられる、と思ったのですが。

基本的には次のようにすると属性を調べることができます。次のスクリプトは Movies フォルダーに mov ファイルがあるとして...。

Script Editor で開く

tell application "System Events"
    set QTFiles to files of movies folder of user domain whose name extension of it is "mov"
    --QuickTime file クラスに変換
    set theFile to item 1 of QTFiles
    set QTFile to QuickTime file (path of theFile)
    --データの取り出し
    set QTData to contents of QTFile
    --属性を調べる
    presentation mode of QTData
end tell

--> stop

結果がおかしいです。stop ってなんですか?そんなのどこにも載っていないのですが。この属性だけでなく、他の属性もなんだか結果がおかしいです。

QuickTime File Suite にあるクラスの属性は、QuickTime Player で調べることができるものです。両者で比べてみると結果にかなりの違いが見られます。これは、System Events の使い方がおかしいのか。それとも System Events のバグなのか...。せっかく QuickTime Player の起動なしで調べられると思ったのに。

パスの入力

Script Editor でスクリプトのテストを行うときに、代理のファイルを使ってテストを行うことがよくあります。ファイルの中身を操作して、その結果を確認するとか。

この時、テストファイルのパスを入力するのが面倒で面倒で...。たいていの場合、テストファイルをデスクトップに置いて、

Script Editor で開く

set theFile to (path to desktop folder as Unicode text) & "test.txt"

みたいなことを書いていたのです。が、最近気づきました。対象ファイルを Script Editor のドキュメントにドラッグ & ドロップすればいいのだと。

Terminal と同じで、ファイルをドキュメントにドラッグ & ドロップすれば、そのファイルのパスに変わるのですね。全く知りませんでした。何気ないことでしたが、とても便利です。

Script Editor のコード補完

Automator にコンテンツを追加。これで最後にしたいな。Script Editor の補完機能について。

Script Editor には、コード補完機能がついていますね。スクリプトアシスタントという設定です。これ、使っている人いますか?

散々な言われ方をしていますが、私は使っています。もっとも、標準のキーバインドでは使いにくいのですが(標準は、F5)。このキーバインドは、変えることができます。Option + / にしたら使い勝手がよくなりました。

キーバインドは、この辺りを参照してみてください。Cocoa アプリケーションは、キーバインドをいろいろと変えることができますが、Script Editor のコード補完にも適用されるのです。Xcode と Objective-C のコード補完ほど便利ではないです(Script Editor は、大文字、小文字を区別する!)が、使い慣れると長い参照やクラスや命令の入力が格段に楽になりますよ。英単語の補完もしてくれますし。

DefaultKeyBinding.dict の作り方が分からないという方、ここにリンクしておきます。ここからダウンロードして ~/Library/KeyBindings にこのファイルを置いてみてください。Script Editor をいったん終了して再度起動すれば、補完が効くようになると思います。

AppleScript の新機能

Automator に少しコンテンツを追加。アクションの作り方は、そろそろ終わりにしたいな...。

AppleScript の新機能。AppleScript 1.10 なんですね。hours が常に 24 時間表記で使用するようになった。month を数字で設定できるようになった。weekday の定数に数字が使えるようになった。日曜日が 1。文字列定数に quote が加わった。バックスラッシュを付け加えるよう。

Considering/Ignoring 属性に numeric strings が加わった。

Script Editor で開く

ignoring numeric strings
    "version 1.9" is less than "version 1.10"
end ignoring

version で返ってくる値が実数になった。と、いまいち、よくわからない部分もありますが。

Xcode 2.0 の新機能

Xcode 2.0 で新しくなったこと。

Xcode で、コンパイル済みスクリプト(拡張子 scpt)の編集、保存ができるようになった。といっても、隠し機能。デフォルトではこの設定は有効になっていません。リリースノートを見れば分かることですが、なんで環境設定で設定できないの?

Xcode が起動していたらいったん終了し、Terminal で以下のコマンドを実行します。

defaults write com.apple.Xcode ASKAllowEditingOfCompiledScripts YES

再度、Xcode を起動するとコンパイル済みスクリプトの編集、保存ができるようになっています。