りんご競争 (2)

ちょっと手違いがあり、前回、あいだの文章が抜けていました。修正しました。すいませんでした。

さて、前回は導入部でした。今回からちょっと鬱陶しいぐらいに詳しく見ていきます。

まず、オリジナルのりんご競争は、賭け金の入力やユーザーの状態をチェックする部分など、直接エディタを操作する以外のゲームとしての機能があります。しかし、これらは今回の検証に関係がないので省きます。AppleScript でスクリプティング対応エディタを操作している部分。この辺りを中心に見ていきます。話の都合上、TextEdit は、RTF 編集モードになっていることとします。

りんご競争の描画は、すべてエディタのウィンドウに対して行います。そのため、オリジナルのりんご競争は、最初にウィンドウの初期化を行っています。その部分だけを抜き出すと、次のようになります。

tell application "スクリプティング対応エディタ"
    launch
    activate
    try
        close window 1 saving no
    end try
    run
    set font of text of window 1 to "Courier"
    set size of text of window 1 to 14
    set name of window 1 to "A Day At The Races"
end tell

例えば、このスクリプトの tell application 〜 の部分を TextEdit に変更するとどうなるか?

構文確認は通ります。実行すると、フォントの指定の部分でエラーになると思います。Cocoa アプリケーションでは、この部分は document を対象にしないといけません。Mac OS X 以前では、window クラスと document クラスは、イコールの関係だった(ことが多かった)のですが、Cocoa アプリケーションではそうではありません。document(テキスト編集部分)クラスと window クラスは、明確に別物です。

別物だということは、フォント指定の前、ウィンドウを閉じている部分で分かります。

close window 1 saving no

この部分は、

close document 1 saving no

としないといけません。TextEdit で何らかの編集を行ってから上記の close window 〜 を実行すると saving no としていても必ず保存するかどうかを尋ねられます。これは、編集した結果を保存をすべきかどうかということは document クラスが責任を持って行うことだからです(言い切りましたが、多分、そういうことだろうという感じです...)。

つまり、window ではなく、document に「保存しなくていいよ」と伝えてあげなくてはだめなのです。こういったことを考慮に入れてスクリプトを修正すると、以下のようになります。

Script Editor で開く

tell application "TextEdit"
    activate
    try
        close every document saving no -- すべてのドキュメントを閉じる
    end try
    run -- 新規ドキュメントが開く
    set gameWindow to front document
    tell gameWindow
        set font of text of it to "Courier"
        set size of text of it to 14
    end tell
    set name of front window to "A Day At The Races"
end tell

しかし、これでフォントと文字のサイズが実際に変更されるわけではありません。document 内の text 属性が空だからです。対象となる文字がないことにはフォントも大きさも変えれるわけがありません。

やりたいことは、初期設定のフォントとサイズを変えたいということなのですが、この方法では駄目なんですね。すでに文字が入力さているなら別ですが。

0 件のコメント :

コメントを投稿