上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

環境: Mac OS X 10.4.9 (PPC)

AppleScript で項目がフォルダかどうかを判別する方法はいくつもあると思いますが、言語環境に依存しないのをひとつ。

Finder の選択項目を言語環境に関わらず判別したかったら、kind of ... ではなく class of ... という書き方をしますよね。

tell application "Finder"
set theItem to (item 1 of (selection as list))
if (class of theItem) is folder then
display dialog "folder"
end if
end tell

ところがドロップレットの場合、値が alias のリストで渡されるようで、class of ... の結果は 常に alias となってしまい、フォルダかどうかの判別ができません。

on open dropItems
tell application "Finder"
set theItem to (item 1 of dropItems)
if (class of theItem) is folder then
display dialog "folder"
else if (class of theItem) is alias then
display dialog "alias"
end if
end tell
end open

そんなときはこう書くと良いようです。

on open dropItems
set theItem to (item 1 of dropItems)
tell application "Finder"
if class of ((properties of theItem) as record) is folder then
display dialog "folder"
end if
end tell
end open


as record がミソ。
項目の properties をレコードと明示して、そこから class というラベルの値を取り出している、という考え方でいいんでしょうか。
理屈はよくわかりませんが、とりあえず目的にかなうのでいいっぽい。

追記: コメント欄も見てちょ。

スポンサーサイト

04/11|AppleScriptコメント(2)トラックバック(0)TOP↑
この記事にコメント
フォルダ属性
openハンドラに与えられるパラメータがエイリアスなのは当然で、Finderの選択項目の形式そのものが、Mac OS全体の中では異端です。
Finderを介在させると、その他の処理に使えない形式のデータを扱わなくてはいけないため、スクリプトが複雑になりがちで、予想外のバグが出る原因にもなります。
で、本来は
folder of (info for theItem)
という真偽属性を用いるべきです。
openハンドラ上でFinderに依存せずフォルダを判定するならば、
on open dropItems
set theItem to (item 1 of dropItems)
tell application "Finder"
if folder of (info for theItem) then
display dialog "folder"
end if
end tell
end open
とするのが良いように思います。
From: MeSH * 2007/04/13 00:16 * URL * [Edit] *  top↑
info for について
>MeSH さん
folder of (info for ...) の場合、package folder でも true になってしまうという落とし穴があるです。
RTFD 形式のファイルや、OmniOutliner の添付書類付きファイルなどもパッケージですから、info for を使うならそのへんを考慮してこんな風に書いた方がいいんじゃないかなと。

if (folder of (info for theItem)) and not (package folder of (info for theItem)) then
...
end if

といってますが、実はご指摘があるまで info for という書き方があることを完全に忘れていました。
ありがとうございました。
From: AquaBowler * 2007/04/13 18:14 * URL * [Edit] *  top↑
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。