SenseTalkスクリプティングにおけるユーザーとのやり取り
SenseTalkでは、実行時に情報の入力を要求するスクリプトを記述できます。以下のコマンドで情報を表示したり要求したりすることで、SenseTalkスクリプトがユーザーとやり取りすることが可能になります。
answer
振る舞い
メッセージを含むシンプルなモーダルパネルと、ユーザーがクリックすることができる最大3個のボタンを表示します。変数it内で、選択されたボタンのタイトルを返します。
使用場面
モーダルパネルに短~中尺のメッセージを表示する必要がある場合や、2~3個の異なる選択肢間の選択フォームにユーザーの入力を要求する必要がある場合は、answerコマンドを使用します。
answerコマンドは、ユーザーがyes/noまたは継続/キャンセルといったタイプの決断を下す必要がある場合に最適なコマンドです。より複雑な選択肢については、askコマンドを使用します。
例
answer "Great! You got " & pctRight & "% correct!"
answer "Go on?" with "Yes" or "No" title "DECIDE"
answer "How do you feel?" with "Great!" or \
"Okay" or "Really Lousy" title "Greetings!"
技術トピック |
構文:answer {panelType} {オプション} オプション: {prompt | body | message} prompt with reply1 {or reply2 { or reply3 {or reply4}}} [title | titled] titleExpr [timeout | time out ] {after | in} duration icon iconName |
オプションのpanelTypeとして、information、question、warningまたはerrorを利用できます。各タイプのパネルが確実に実装されるかどうかはホストアプリケーション次第ですが、一般的には、パネル内には関連するアイコンが示されます。 |
promptは、その値がパネル内の主要テキストとして表示される式となります。TitleExprは、パネル上部に大型フォントで表示されるタイトルとなります。 |
reply1、reply2、reply3およびreply4は、パネル下部のボタン上に表示されるラベルであり、reply1はデフォルト(右端の)ボタンとなります。表示されるボタンの数は、コマンドで指定するreply文字列の数に一致します。replyを全く指定しない場合は、「OK」とラベル付けされたボタンが1つだけ表示されます。 |
timeoutオプションを使用する場合は、durationにより、ユーザーの入力を待つ間にパネルが表示される時間の長さ(明示的に指定しない場合は秒単位)が指定されます。ユーザーがこの時間内にパネルに応答しない場合は、本パネルは自動的に閉じられます。この場合は、変数itはemptyとなり、result関数はパネルのタイムアウトを示す値に設定されます。 |
iconオプションは、パネルに表示させる異なるアイコンを指定するのに使用できます。本オプションを使用する場合は、iconNameは既知のシステムアイコンの名前か、アイコンファイルのフルパスのいずれかとなります。 |
prompt、reply、title、timeoutおよびiconオプションを指定する順番には柔軟性があり、これらすべてのオプションは任意で使用できます(ただし、少なくとも1つのオプションを使用する必要があります)。 |
answerコマンドの実行後は、変数itにクリックしたボタンのタイトルが格納されます(パネルのタイムアウト期間が経過した場合はemptyとなります)。 |
Answerコマンドに関する詳細情報は、AskとAnswerの利用を参照してください。
ask
振る舞い
ユーザーが答えを入力できるprompt文字列とテキストエントリフィールド含むモーダルパネルを表示します。デフォルトの答えを指定できます。変数it内で、ユーザーのアンサーが返されます。
使用場面
事前定義済みの選択リストからではなく、ユーザーからの答えが必要な場合にaskコマンドを使用します。ask passwordコマンドを使用すると、タイプ時に隠される入力を要求できます。
例
ask "Enter your name:"
ask "How do you feel?" title "Greetings!"
ask query with defaultAnswer title "Please Answer"
ask password "Enter the secret code"
技術トピック |
構文:ask {password} {オプション} オプション: {prompt | question} question [title | titled] titleExpr [with {answer} | answer] presetAnswer [hint | placeholder | place holder] placeholder [message | body] {text} message {with} [buttons | button {label{s}] label1 {and label2} [timeout | time out] {after | in} duration icon iconName |
questionのテキスト値は、パネル内の入力フィールドの上にプロンプトとして表示されます。TitleExprはタイトルを指し、パネル上部に大型フォントで表示されます。presetAnswer式の文字列値は、デフォルトの答えとしてanswerフィールドに表示されます。placeholderを指定する場合は、プレースホルダーの値はanswerフィールドに表示されます(answerフィールドがemptyでかつ選択されていない場合)。messageテキストは、タイトル下部のパネル内に表示されます。 |
label1(およびオプションでlabel2)を指定する場合は、本オプションはパネル上のボタンを定義し、そうでなければ2つのボタン(CancelとOK)がパネル下部に表示されます。ユーザーがOKボタンをクリックする(またはreturnを押す)と、answerフィールド内の値が変数itに入れられます。ユーザーがCancel ボタンをクリックすると、変数it内の値はemptyに設定され、the result関数が「Cancel」を返します。 |
timeoutオプションを使用する場合は、durationにより、ユーザーの入力を待つ間にパネルが表示される時間の長さ(明示的に指定しない場合は秒単位)が指定されます。ユーザーがこの時間内にパネルに応答しない場合は、本パネルは自動的に閉じられます。この場合は、変数itはemptyとなり、result関数はパネルのタイムアウトを示す値に設定されます。 |
iconオプションは、パネルに表示させる異なるアイコンを指定するのに使用できます。本オプションを使用する場合は、iconNameは既知のシステムアイコンの名前か、アイコンファイルのフルパスのいずれかとなります。 |
これらのオプションを指定する順番には柔軟性があり、これらすべてのオプションは任意で使用できます(ただし、少なくとも1つのオプションを使用する必要があります)。 |
askコマンドの実行後は、本フィールドに入力された値(または、パネルのタイムアウト期間が経過した場合はempty)が変数itに格納されます。 |
Askコマンドに関する詳細情報は、AskとAnswerの利用を参照してください。
put
振る舞い
送り先のコンテナを指定しない場合は、putコマンドは標準出力にテキストを表示します。
使用場面
answerコマンドのようにモーダルパネルを提示することなく、スクリプトの実行時にステータス情報を表示したい場合にputコマンドを使用します。また、putコマンドはスクリプトの様々な箇所で現在の変数の値を表示させることができるため、スクリプトの開発時によく使用されます。
例
put "Successfully loaded file " & fileName
put n
put "The area is: " & pi * radius^2
技術トピック |
構文: put {expr { , expr...}} |
|
ここでは、最もシンプルな形式のputコマンドのみについて説明します。putコマンドのその他の使用法については、コンテナを参照してください。
beep
振る舞い
システムビープ音を発します。
使用場面
ユーザーに注意を与えたい場合や、何らかの出現に対して警告を発する場合に、beepコマンドを使用します。
例
beep
beep 5 -- ユーザーの注意を確実に引きます!
技術トピック |
構文: beep {expr} |
Exprは、ビープ音の発生回数を生成する、有効な任意のSenseTalk式とすることができます。 |
play
振る舞い
サウンドファイルを再生します。
使用場面
システムサウンドやその他のサウンドもしくは音楽ファイルの再生を開始したい場合に、playコマンドを使用します。
例
play "Glass" -- フルパスなしでシステムサウンドを再生します
play "~/Music/iTunes/iTunes Music/Billy Joel/Piano Man.mp3"
play stop -- 音楽を停止します
技術トピック |
構文:play soundFile |
SoundFileは、再生するサウンド名か、いずれかの特殊コマンド(「pause」、「resume」または「stop」)を生成する、有効な任意のSenseTalk式とすることができます。 |
sound関数
振る舞い
現在再生されているサウンド名か、「done」を返します。
使用場面
現在再生されているサウンドを監視したい場合は、sound関数を使用します。
例
wait until the sound is "done"
技術トピック |
構文:the sound sound() |
ユーザーにファイルまたはフォルダを選択するよう求める
以下の複数のコマンドでは、ユーザーとのやり取りを通じて、スクリプトで扱うファイルシステム内の特定のファイルやフォルダをユーザーに選択/指定させることができます。
answer fileおよびanswer folderコマンドは、標準的なOpenパネルを表示して、それぞれ既存のファイルまたはフォルダをユーザーに選択させます。ask fileおよびask folderコマンドは、標準的なSaveパネルを表示して、ユーザーにファイルシステム内の場所を選択させるとともに、新しいファイル名を入力させます。
answer file
振る舞い
Openパネルを表示して、ユーザーが既存のファイルを選択できるようにし、選択されたファイルのフルパス名を変数it内に返します。
使用場面
answer fileコマンドは、既存のファイル名をユーザーから与えてほしいときに使用します。そうすると、今度はそのファイルを開いたり( openコマンドを使用)、別の用途に使用したりできます。
ユーザーが選択したファイルのフルパス名は、変数it内に返されます。複数のファイルが選択された場合は、ユーザーが選択した各ファイル名をit内の別々のアイテムに格納したリストが返されます。ファイルが選択されなかった場合(すなわち、ユーザーがパネル上の「Cancel」ボタンをクリックした場合)、answer fileコマンド以降の変数itは空になり、the result関数からは「Cancel」が返されます。
例
answer file
answer file "Select Account File" with "Dec03"
answer multiple files "Choose Data Sets" in folder "/Users/mmalone/data"
answer file with button label "Select" of type "png", "tif", or "tiff" in folder "~/Pictures" title "Choose an Image"
技術トピック |
構文:answer {multiple | single} file {オプション} オプション:{prompt} promptExpr [title | titled] タイトル式 of type 要素 {or 要素}... with デフォルトファイル in [folder | directory] デフォルトフォルダ allow multiple {with} {button} label ボタンラベル |
answer fileコマンドの一番シンプルな形はanswer fileです。fileという語の前にmultipleまたはsingleという語を使用すると、ユーザーが一度に複数のファイルを選択可か否かを指定できます。どちらも指定しない場合、1つのファイルのみ選択可となります。 |
このコマンドは、他にも数々のオプションを内部に指定することができます。どのオプションも必須ではなく、オプションを指定する順番も自由です。ただし、1つのオプションを2回以上指定することはできません。 |
promptまたはtitleオプションを指定する場合、与える式は、Openパネルの上部に表示されるタイトルとして使われます。どちらも指定しない場合は、「Open」という語が使われます。両方を指定した場合は、プロンプト式の方だけが使われます。 |
of typeオプションを使うと、1つ以上のファイルの種類を指定することができます。複数の種類を羅列するときは、コンマかor、またはその両方で、それぞれの間を区切ります。このオプションが含まれている場合、指定された種類のどれかに拡張子が一致しているファイルだけが受け入れられます(ファイル拡張子はファイル名の最後のピリオド以降の部分です)。ファイル拡張子の指定にはピリオドを含めても含めなくても構いません(例、「eps」と「.eps」のどちらも可)。拡張子なしのファイルを含めたい場合にはemptyまたは“”を指定します。 |
withデフォルトファイルを指定すると、そのファイルが存在する場合にそのファイルが選択されます。値にファイル名だけでなくフォルダを含めると、Openパネルに表示される初期フォルダがそのフォルダになります。 |
in folderオプションは、初期フォルダを指定します。Openパネルには、初期フォルダの中身が表示されます。 |
labelオプションを指定すると、Openパネル内のデフォルトボタンのラベルとしてボタンラベルが使われます。このオプションを指定しない場合、ボタンのラベルは「Open」になります。 |
allow multipleを指定すると、ユーザーが一度に複数のファイルを選べるようになります。このオプションは、answer multiple files構文の代わりとして使用できます。 |
answer folder、answer directory
振る舞い
Openパネルを表示して、ユーザーが既存のフォルダを選択できるようにし、その選択されたフォルダのフルパス名を変数it内に返します。
使用場面
answer folderコマンドは、既存のフォルダ名をユーザーから与えてほしいときに使用します。
ユーザーが選択したフォルダのフルパス名は、変数it内に返されます。複数のフォルダが選択された場合は、各フォルダ名をit内の別々のアイテムに格納したリストが返されます。フォルダが選択されなかった場合(すなわち、ユーザーが「Cancel」ボタンをクリックした場合)、answer folderコマンド以降のitは空になり、the result関数からは「Cancel」が返されます。
例
answer folder "Select the working Directory:"
answer multiple folders "Choose source paths" \
in folder "~/Documents"
技術トピック |
構文:answer {multiple | single} [folder | directory] {オプション} オプション:{prompt} プロンプト式 |
answer folderコマンドは、ほとんどの点でanswer fileコマンドと同じですが、ユーザーに示されるOpenパネルで選択できるのがファイルではなくフォルダであるという点が異なります。 |
このコマンドは、他にも数々のオプションを内部に指定することができます。どのオプションも必須ではなく、オプションを指定する順番も自由です。ただし、1つのオプションを2回以上指定することはできません。上のanswer fileコマンドのところにあるオプションの説明を参照してください。このコマンドでは、ファイルタイプの拡張子は指定できません。 |
返される値は、the folderNamesEndWithSlashグローバルプロパティがfalseに設定されていない限り、スラッシュで終わります。末尾にスラッシュがあると、ファイル名を追加するだけで簡単にフルパス名が作成できます。 |
ask file、ask folder、ask directory
振る舞い
Saveパネルを表示して、作成するファイルまたはフォルダの名前をユーザーが指定できるようにし、その指定されたファイルのフルパス名を変数it内に返します。
使用場面
ask fileまたはask folderコマンドは、スクリプトで作成/上書きされるファイルまたはフォルダの名前と場所をユーザーに指定させたいときに使用します。
ユーザーが指定したファイル名のフルパス名は、変数it内に返されます。ファイルが選択されなかった場合(すなわち、ユーザーが「Cancel」ボタンをクリックした場合)、ask fileコマンド以降の変数itは空になり、the result関数からは「Cancel」が返されます。
なお、あらゆる標準Saveパネルと同じように、ユーザーが既存のファイルを選択した場合には、ファイルを置き換えてもよいかどうか尋ねる警告パネルが表示されます。このパネルにある「Replace」ボタンをユーザーがクリックすると、選択されたファイル名が変数it内に返されますが、 既存のファイルが削除されたり、変更されたりはしません。既存ファイルの削除(可能な場合)と、その後の同名新規ファイルの作成は、スクリプトで行います。ファイルが存在するかどうかを確認するには、there is a file演算子が使えます(例、if there is a file ファイル名 then ...)
例
ask file "Enter output file name:
ask file "Temporary file to create:" with "temp1"
ask file "Log Changes" of type ".mylog" in folder "logs"
ask folder "Enter new folder name:" in folder homeFolder
技術トピック |
構文:ask [file | folder | directory] {オプション} オプション:{prompt} プロンプト式 [title | titled] タイトル式 of type 必須拡張子 with デフォルトファイル in [folder | directory] デフォルトフォルダ allow multiple {with} {button} label ボタンラベル |
ask fileコマンドの一番シンプルな形は、ask fileだけの形です。このコマンドは、他にも数々のオプションを内部に指定することができます。どのオプションも必須ではなく、オプションを指定する順番も自由です。ただし、1つのオプションを2回以上指定することはできません。 |
promptまたはtitleオプションを指定する場合、与える式は、Saveパネルの上部に表示されるタイトルとして使われます。どちらも指定しない場合は、「Save」という語が使われます。両方を指定した場合は、プロンプト式の方だけが使われます。 |
of type 必須拡張子オプションを使うと、Saveパネルで保存されるファイルの種類に指定のファイル拡張子が用いられ、返されるファイル名は必ずその拡張子を持つことになります(ファイル拡張子はファイル名の最後のピリオド以降の部分です)。ファイル拡張子の指定にはピリオドを含めても含めなくても構いません(例、「eps」と「.eps」のどちらも可)。 |
withデフォルトファイルを指定すると、ファイル名フィールドにその名前が既に入力された状態でSaveパネルが表示されます。値にファイル名だけでなくフォルダを含めると、Save パネルに表示される初期フォルダがそのフォルダになります。 |
in folderオプションは、初期フォルダを指定します。Saveパネルには、初期フォルダの中身が表示されます。 |
labelオプションを指定すると、Saveパネル内のデフォルトボタンのラベルとしてボタンラベルが使われます。このオプションを指定しない場合、ボタンのラベルは「Save」になります。 |
ask folderコマンドの場合、the folderNamesEndWithSlashグローバルプロパティがfalseに設定されていない限り、返される値はスラッシュで終わります。末尾にスラッシュがあると、ファイル名を追加するだけで簡単にフルパス名が作成できます。 |