ターミナル.appのコマンドをScriptから発行させる方法がないかと思案しました。
辞書を探す
まず辞書を確認します。 スクリプトエディタを開いて⌘ボタン+Lキーでライブラリを表示させます。 ライブラリにターミナルがないので+ボタンをクリックして追加しましょう。 アプリ選択のダイアログで~/applications/utilities/にあるターミナル.appを選びましょう。 これでターミナルの辞書が追加されました。
早速辞書を開くとびっくり!。
ターミナルスイートが一つだけあって、その中にコマンドが4つしかありません。
run、quit、count、do scriptです。
多分説明をみるまでもなくdo scriptがコマンド発行の命令でしょう。
説明には
do script string [with command string] [in reference]
というような表記があります(英語の説明は省略)。
[ ]は省略できるので、do script + 文字列でできそうでね。
実際にやってみましょう。
ターミナルで遊べそうな題材をさがす
ただコマンドを発行しても面白くないので、遊べそうな裏コマンドを探しましょう。 xillionが見つけたのは、emacsのテトリスというゲーム。 applescriptを作る前に、ターミナルからemacsを試してみましょう。 1.ターミナルを起動 2.emacsと入力してreturnキーを押す 3.escキーに続けてxtetris入力してreturnキーを押す(このとき画面下にM-x tetrisと表示されています) 4.テトリスが始まります。 矢印キーとspaceキーで遊んでください。 emacsはUNIX環境で動くエディタです。Editor + MACroS = マクロが動くエディタという名前の通り豊富なマクロがあり、その機能はエディタにとどまりません。テトリス以外にもいくつか遊べそうなものがありますのでググってみましょう。applescriptを作ろう
閑話休題。この操作をapplescriptから行います。 1.2.までの部分はdo scriptでできそうですが、emacsを立ち上げてからのキー入力が難しそうです。 いろいろ調べてみたら、system eventにkey code、keystrokeというコマンドがあります。 escキーやreturnキーをシミュレートしたいのでkey codeを使いましょう。 ssystem eventの辞書には
key code integer
: The key code(s) to be sent. May be a list.
[using command down/control down/option down/shift down]
: modifiers with which the key codes are to be entered
キーコードを整数もしくは整数のリストを使用すればよさそうです。
加えてusingオプションで⌘キー、controlキー、option(alt)キー、shiftキーとの同時押しもシミュレートできそうですね。
キーコードで表記すると言ってもキーコードがわかりませんね。
キーコードを調べるにはhttp://www.manytricks.com/keycodes/でダウンロードできるkeycode.appを使うのが便利です。
実際のキープレスを読み取ってコードを表示してくれます。
ということでこんな スクリプトを作ってみました。
tell application "Terminal"
do script "emacs"
activate
end tell
tell application "System Events"
key code {53, 7, 17, 14, 17, 15, 34.1, 36}
--[ESC],x,t,e,t,r,i,s,[ret]
end tell
※立ち上がるタイミングのため(だと思いますが)起動がうまくつながらない場合があるようです。
ターミナルというよりもkey codeの説明になってしまいました。
でも発見できてまたapplescriptの世界が広がりそうです。