Xcodeは外部からAppleScriptでコントロールできるScriptableなアプリケーションだ。
にもかかわらず、いまひとつその方面の利用技術が進歩していなかったのには訳がある。選択中のテキストを取得したり、選択部分を書き換える方法が見つかっていなかったからである。
これが全世界的に同じ状況とは思わないが、Script Editor上の記述支援スクリプトを数百も用意して生産性をおっそろしく向上できている状況からすると、Xcode自体のスクリプティングはお寒い限りであった。
たとえば……
tell application "Xcode"
set a to selection
set b to contents of a --できていない
end tell
こんなスクリプトを書いてみても、うまく動かない。日々の情報収集を行うなかでPhilip Akerが教えてくれたのが、
tell application "Xcode"
tell text document 1
set a to selection
end tell
end tell
という「text document」なる奇怪なオブジェクトの存在である。なんなんだそれは?(汗) で、このオブジェクト階層からでもselectionは取得できる。内容は、
text 176 thru 196 of text document "as_simple_test.applescript"
こんな感じの煮ても焼いても喰えないたたずまいである。さきほどの、
tell application "Xcode"
set a to selection
end tell
でも、同じような結果が返ってくる。どーやってそこから中身を取り出すかというのが懸案事項であった。
それが唐突に判明した。書き方は非常に簡単なのだが、効果はてきめん。なんでこれに気付かなかったのか理解に苦しむほどだ。
tell application "Xcode"
tell text document 1
set a to contents of selection
--> "display dialog ¥"TEST¥""
end tell
end tell
「contents of selection」だと中身が取り出せて、2行に分けて書くと取り出せない。このあたり、ひじょーーーに理解不能な香りがするのだが、あえて疑問を持たずに「そーゆーふーに書けば大丈夫」と覚えておくことにした。
選択中のテキストを書き換えるのも……
tell application "Xcode"
set contents of selection to "--test"
end tell
なんて書けばOKだ。
これで、記述支援用のXcodeプラグイン側からの入出力が行えることになった。
いまのいままで、Xcode用のプラグインを作れるといっても、たいして生産性を上げるようなものは作れなかった。さまざまなスクリプトの書き方を自動的に生成したとしても、Xcode上のドキュメントに転送する手段がなかったのだ(クリップボードに入れておくだけでは弱い)。
この些細な書き方が分かっただけで、生産性を向上させるための大量の機能を実装することが可能になる!!!