ダイアログとリスト@OS X 10.7
display dialog でダイアログボックスにボタンを表示させて条件分岐するにはこんなふうに書く。
display dialog "処理を選択してください。" buttons {"キャンセル", "[A]", "[B]"} default button 3
set ANS to result

if button returned of ANS is "[A]" then
--命令A
else if button returned of ANS is "[B]" then
--命令B
else if button returned of ANS is "キャンセル" then
return
end if

具体的には例えばこう。
--tell application "Quicksilver" to activate
--Quicksilver でこのスクリプトを使う場合は ↑ この行が必要みたい。理由は知らない。
display dialog "may I help you ?" buttons {"キャンセル", "Safari", "Clean Up"} with icon 2 default button 3
--icon には「icon 0」「icon 1」「icon 2」が使える。
--icon 0 は「icon stop」、1 は「caution」、2 は「note」と書ける。
set ANS to result

if button returned of ANS is "Clean Up" then
tell application "Finder"
set visible of every process whose visible is true and name is not "Finder" to false
close every window
end tell

else if button returned of ANS is "Safari" then
tell application "Safari"
activate
end tell

else if button returned of ANS is "キャンセル" then
return
end if

c0070938_9303120.png
実行したところ。


アイコンについては(も、他のもろもろについても)ザリガニさんの display dialogとdisplay alertの違い という記事が詳しい。わずか1年前の記事だけど、ボタンのカタチが違うんですねえ。
ただ、何故かボタンは3つ以内という制限がある。ひとつはキャンセルに当てたいので、実質2択だ。どうしてこんな仕様なのか不思議でしょうがない。「そりゃあボタンを4つ以上表示させるのは技術的にむずかしいだろうな」という納得感が、ぜんぜんない。何故ボタンの数に制限をかけるのか。それよりは、「ボタン数は無制限だが増やし過ぎると速度が低下する」という仕様の方がよほど納得できるではないか。
 キャンセルボタンを省くことはおすすめしない。それをやるとキャンセルしたいとき、強制終了しか手がない状態になる。いや、じつはエスケープキーでキャンセルできるのだが、この「エスケープキーでキャンセル」という機能は、「キャンセル」または「cancel」という名前のボタンが存在する場合にのみ有効、という不思議仕様。意味ねー。バカじゃねーの。

ボタンAが押されたら次のダイアログを表示、Bが押されたら別のダイアログを表示、という二段階方式にすれば(そして2段目のダイアログではキャンセルボタンを省くとすれば)「2段で6択」が可能だ。しかし、2段という時点で面倒臭いんだよ。2段あると2回考えなきゃいけないの。しかもその選択肢を考えたのが自分だというのがまた腹立たしい。なんでなんだよ、と思うんですよ。ケチケチせずにボタンたくさん使わせてくれりゃあ1回で済むじゃん、なんでなんだよ、という怒りが込み上げてくるせいで、この理不尽に耐えられない。

そんな面倒臭がりやさんたちは、「choose from list」というのを使いましょう。

set instruction to item 1 of (choose from list {"A", "B", "C", "D", "E", "F", "G"} default items "A")

if instruction is "A" then
--命令A
end if
if instruction is "B" then
--命令B
end if
if instruction is "C" then
--命令C
end if
if instruction is "D" then
--命令D
end if
if instruction is "E" then
--命令E
end if
if instruction is "F" then
--命令F
end if
if instruction is "G" then
--命令G
end if

c0070938_10334.png
実行したところ。選択肢はいくつあっても可。キャンセルボタンはデフォルト装備。
デフォルトアンサーを実行するならリターンキーを叩けばいいし、それ以外の選択肢はマウスでダブルクリックすれば即刻実行される。
マウスが嫌いな人はキーボードの上下矢印キーで選択項目を上下に移動できる。
そしてリターンキーで実行。素晴らしいじゃないですか。


AppleScript について大概のことは Google 先生に聞けばなんとかなるけど、これはどうにもならなかった。何をコピペしてどう改変してどう試行錯誤しても、「リストでAを選んだら命令A、Bを選んだら命令B」というのが動作しない。いろんな人が AppleScript のリストについて書いてくれてるんだけど、僕が知りたい、いちばん単純な(いちばん単純だと僕が思う)情報がどうしても見つからない。つまりこんな需要はひどくマイナーなのかも知れない。でも今後マイナーな人が Google 先生に聞くかも知れないと思い、記事をアップします。「GameSprit」の vallie さんにご教示いただきました。お世話になりました。またお世話になる気満々ですのでよろしくお願いします。
[PR]
by nobiox | 2012-10-04 00:20 | ├バカスクリプト | Comments(0) |
<< 「ガタカ」(1997/106min) | 町山智浩が語る「20世紀少年<... >>