スクリプト中からopenハンドラを呼び出す

1997.7.19

by Bird


 「on open」ハンドラは、ファイル/フォルダのアイコンをスクリプトアプリケーションのアイコンにドロップすることで呼び出されます。これは皆さん、よくご存じですよね?

 それではスクリプト中から「on open」ハンドラを呼び出すことができることは知っていますか? 例えば、

  on open ItemList
    tell application "Finder"
      repeat with OneItem in ItemList
        set label index of every item of OneItem to 1
      end repeat
    end tell
  end open

 という、ドロップされたフォルダ内のすべてのファイル/フォルダにラベルを付ける(ラベル番号を1にする)スクリプトを考えてみましょう。これをダブルクリックでも起動できるようにするにはどうすればよいでしょうか?・・・答えは簡単! スクリプトに次の2行を追加するだけです。

  choose folder
  open result as list

 または、「open (choose folder) as list」と1行で書いても同じことですね。注意すべきことは、「on open」ハンドラのパラメタはリストでならなければならないということです。

 一般的には、「on run」ハンドラ、「on open」ハンドラ双方から、サブルーチンを呼び出すという方法をとることが多いようですが、上記の方法の方が簡潔でしょ?(まあ、好みの問題と言ってしまえばそれまでですけど...。)

 さてさて、「on run」ハンドラから「on open」ハンドラを呼び出すことができるなら、「on open」ハンドラの中から自分自身を呼び出す再帰的な処理もできるはずです。先のスクリプトをフォルダ内のフォルダの項目も処理できるように改造してみましょう。

  on open ItemList
    tell application "Finder"
      repeat with OneItem in ItemList
        set label index of every item of OneItem to 1
        set FolderList to every folder of OneItem
        tell me to open FolderList--自分自身を呼び出す
      end repeat
    end tell
  end open

・・・てな具合ですね。何のことはない、サブルーチンの中から自分自身を呼び出すのとそっくりです([Tips---フォルダに含まれる全てのファイルを処理する]を参照)。えっ、このようにサブルーチンを使わずに「on open」ハンドラ自身を呼び出すことのメリットはあるのかだって? う〜ん、要するに好みの問題ですよ、好みの(^ ^;

 以上のことから、当然、他のコマンドハンドラ(「on run」「on idle」「on quit」「on print」)も同様も呼び出すことができることは容易に推測されるところでしょう。

 しかし、同じスクリプト中からこれらのコマンドハンドラを呼び出す意味はあまりないように思われます。しかし、他のスクリプトから命令を送る場合にはその限りではありません。むしろ、その方が本来のコマンドハンドラの呼び出し方(?)と言えるかも知れません。(Bird)


Tipsに戻る
AppleScriptのページに戻る
このホームページに関するお問い合わせは、karino@drycarbon.comまで。