AppleScript では、カスタムなアイコンファイルを指定してダイアログ表示することができる、とむかしどこかに書いたことを思い出した。…そう、これ! AppleScript 0007 - Display dialog アイコン付き表示 - GameSprit
これを利用すると、アイコンを用意してちょっとしたゲームを AppleScript とその UI で作ることができそう。
じゃんけんゲームとか。ここでは、最近使ったものの復習や新たな勉強を兼ねて、このカスタムアイコンでダイアログ表示をしてみます。
まず、どんなものを作るか、検討してみます。簡単に。
アイコンを表示させるには、表示させるアイコンが必要。
では、AppleScript からファイル検索してファイル名の末尾が「.icns」を拾ってみよう。
そこで、検索した結果をリスト化して、そのリストから表示させるアイコンを選択して、ダイアログ表示させよう。
順序立ててみます。
まず、AppleScript からファイル名の末尾が「.icns」のファイルを検索します。
せっかくなので、この機能を実現するために、シェルコマンドから spotlight を利用してみます。
コマンドラインから使う spotlight は、mdfind というコマンドです。
ファイル名を指定して検索するコマンドは「mdfind -name ファイル名(の一部)」です。
その結果をリスト化して、AppleScript の choose from list を使って、そのリストからアイコンファイルを
選びます。これは、AppleScript : weather hacks で天気予報 - GameSprit で使った方法です。
最後に、display dialog コマンドに [with icon file] オプションを使って、アイコンファイル付
ダイアログを表示させます。
さて、それではコードを書いてみます。
シェルコマンドから「なんちゃら.icns」というファイルを検索し、結果を変数 retTxt に格納します。
結果の行数(= ファイル数)を変数 maxlinenr に格納します。
あとで、ループ処理をするときの上限値を設定するのに使います。
icnsList という空の List を作り、前述の検索したファイルを順に icnsList に加えてゆきます。
paragraph を使うと、1行毎に取り出すことができます。
![](https://blogimg.goo.ne.jp/user_image/57/87/340627d53ec8407ed6dbe5943500c716.png)
表示したい icns を choose from list を使って選び、選んだ結果を変数 theIcns に格納します。
icns のパス表示を「/」区切りから「:」区切りに変換して、そのアイコンとともにダイアログ表示します。
例えば、「/Developer/Examples/TextEdit/html.icns」を「Macintosh HD:Developer:Examples:TextEdit:html.icns」に変換します。
![](https://blogimg.goo.ne.jp/user_image/0e/c9/219818eb6a0f96a0c83f75a86fa98888.png)
まとめると、次のようなスクリプトが完成します。
キーワード:AppleScript、display dialog、with icon file、choose from list、POSIX file、paragraph、mdfind、.icns、spotlight
これを利用すると、アイコンを用意してちょっとしたゲームを AppleScript とその UI で作ることができそう。
じゃんけんゲームとか。ここでは、最近使ったものの復習や新たな勉強を兼ねて、このカスタムアイコンでダイアログ表示をしてみます。
まず、どんなものを作るか、検討してみます。簡単に。
アイコンを表示させるには、表示させるアイコンが必要。
では、AppleScript からファイル検索してファイル名の末尾が「.icns」を拾ってみよう。
そこで、検索した結果をリスト化して、そのリストから表示させるアイコンを選択して、ダイアログ表示させよう。
順序立ててみます。
まず、AppleScript からファイル名の末尾が「.icns」のファイルを検索します。
せっかくなので、この機能を実現するために、シェルコマンドから spotlight を利用してみます。
コマンドラインから使う spotlight は、mdfind というコマンドです。
ファイル名を指定して検索するコマンドは「mdfind -name ファイル名(の一部)」です。
その結果をリスト化して、AppleScript の choose from list を使って、そのリストからアイコンファイルを
選びます。これは、AppleScript : weather hacks で天気予報 - GameSprit で使った方法です。
最後に、display dialog コマンドに [with icon file] オプションを使って、アイコンファイル付
ダイアログを表示させます。
さて、それではコードを書いてみます。
シェルコマンドから「なんちゃら.icns」というファイルを検索し、結果を変数 retTxt に格納します。
set retTxt to do shell script "mdfind -name .icns"
結果の行数(= ファイル数)を変数 maxlinenr に格納します。
あとで、ループ処理をするときの上限値を設定するのに使います。
set maxlinenr to (count paragraph of retTxt)
icnsList という空の List を作り、前述の検索したファイルを順に icnsList に加えてゆきます。
paragraph を使うと、1行毎に取り出すことができます。
set icnsList to {}
repeat with i from 1 to maxlinenr
set icnsList to icnsList & paragraph i of retTxt
end repeat
![](https://blogimg.goo.ne.jp/user_image/57/87/340627d53ec8407ed6dbe5943500c716.png)
表示したい icns を choose from list を使って選び、選んだ結果を変数 theIcns に格納します。
set theIcns to choose from list icnsList
icns のパス表示を「/」区切りから「:」区切りに変換して、そのアイコンとともにダイアログ表示します。
例えば、「/Developer/Examples/TextEdit/html.icns」を「Macintosh HD:Developer:Examples:TextEdit:html.icns」に変換します。
display dialog "This icon ?" with icon file POSIX file theIcns
![](https://blogimg.goo.ne.jp/user_image/0e/c9/219818eb6a0f96a0c83f75a86fa98888.png)
まとめると、次のようなスクリプトが完成します。
-- シェルコマンドから「なんちゃら.icns」というファイルを検索し、結果を変数 retTxt に格納する
set retTxt to do shell script "mdfind -name .icns"
-- 結果の行数(= ファイル数)を変数 maxlinenr に格納する
set maxlinenr to (count paragraph of retTxt)
-- icnsList という空の List を作り、前述の検索したファイルを順に icnsList に加えてゆく
set icnsList to {}
repeat with i from 1 to maxlinenr
set icnsList to icnsList & paragraph i of retTxt
end repeat
-- 表示したい icns を選び、選んだ結果を変数 theIcns に格納する
set theIcns to choose from list icnsList
-- icns のパス表示を「/」区切りから「:」区切りに変換して、そのアイコンとともにダイアログ表示する。
display dialog "This icon ?" with icon file POSIX file theIcns
キーワード:AppleScript、display dialog、with icon file、choose from list、POSIX file、paragraph、mdfind、.icns、spotlight