COMMAND アクションには、必ず ACTION と EXEC_STRING の 2 つのフィールドが必要です。
ACTION action_name { EXEC_STRING execution_string }
実行文字列は、COMMAND アクション定義の最も重要な部分です。この文字列は、[端末エミュレータ] ウィンドウで実行するコマンド行と類似の構文を使用しますが、ファイルと文字列の引き数を処理するための追加構文も含みます。
実行文字列には、次のものが含まれます。
ファイル引き数と非ファイル引き数
シェル構文
実行可能ファイルの絶対パスまたは名前
引き数は、コマンドまたはアプリケーションを適切に実行するのに必要な情報です。たとえば、テキスト・エディタでファイルを開くのに使用できるコマンド行について考えてみます。
dtpad filename
このコマンドでは、filename は dtpad コマンドのファイル引き数です。
アプリケーションやコマンドのように、アクションは引き数を持つことができます。COMMAND アクションが使用できるデータ型は、次の 2 つです。
ファイル
文字列データ
実行文字列は、シェルを介してではなく直接実行されます。しかし、実行文字列でシェルを明示的に呼び出すことができます。
たとえば、次のようになります。
EXEC_STRING ¥ /bin/sh -c ¥ 'tar -tvf %(File)Arg_1% 2>&1 | ¥${PAGER:-more};¥ echo "¥¥n*** Select Close from the Window menu to close ***"'
アプリケーションが PATH 変数にリストされているディレクトリにある場合は、単純な実行可能ファイル名を使用できます。アプリケーションが他にある場合は、実行可能ファイルへの絶対パスを使用しなければなりません。
コマンド行からアプリケーションを起動するのに使用する EXEC_STRING に対しても同じ構文を使用します。
次の実行文字列は、デジタル・クロックでクライアント xclock を起動します。コマンド行にはコマンド行オプションが含まれていますが、引き数は必要ありません。
EXEC_STRING xclock -digital
ファイル引き数に対して、次のいずれかの構文を使用します。
%Arg_n%
%(File)Arg_n%
Arg_n に指定された引き数は (デフォルトでは) ファイルと見なされるので、(File) はオプションになります。(%(String)Arg_n% 構文の使用方法については、「文字列としてのファイル引き数の解釈」を参照してください。)
この構文により、アクション・アイコンにデータ・ファイル・オブジェクトをドロップし、そのファイル引き数でアクションを起動できます。コマンド行で n 番目の引き数を置き換えます。ローカル・ファイルまたはリモート・ファイルのどちらも使用できます。
次の例は、ディレクトリ引き数によってのみ動作するアクションのための定義の一部を示します。ディレクトリがアクション・アイコンにドロップされると、アクションは読み取り権および書き込み権の両方を持つディレクトリにあるすべてのファイルのリストを表示します。
ACTION List_Writable_Files { ARG_TYPE FOLDER EXEC_STRING /bin/sh -c 's -l %Arg_1% | grep rw-' ... }
ファイル引き数に対して、次の構文を使用します。
%(File)"prompt"%
この構文は、アクション・アイコンをダブルクリックしたときに、ファイル名の要求を表示するアクションを作成します。
たとえば次の実行文字列は、wc -w コマンドのファイル引き数を要求するダイアログ・ボックスを表示します。
EXEC_STRING wc -w %(File)"Count words in file:"%
ファイル引き数に対して、次のいずれかの構文を使用します。
%Arg_n"prompt"%
%(File)Arg_n"prompt"%
この構文は、次の動作を行うアクションを作成します。
ファイル引き数としてドロップされたファイルを受け取る
アクション・アイコンをダブルクリックしたときに、ファイル名を要求するダイアログ・ボックスを表示する
たとえば次の実行文字列は、ドロップされたファイルで lp -oraw を実行します。アイコンをダブルクリックするとアクションが起動する場合、ダイアログ・ボックスが表示され、ファイル名を要求します。
EXEC_STRING lp -oraw %Arg_1"File to print:"%
非ファイル・パラメータに対して、次のいずれかの構文を使用します。
%"prompt"%
%(String)"prompt"%
引用符で囲まれたテキストは、デフォルトでは文字列データとして解釈されるので、(String) はオプションになります。この構文は、非ファイル・データを要求するダイアログ・ボックスを表示します。ファイル名を要求するときは、この構文は使用しないでください。
たとえば、次の実行文字列は xwd コマンドを実行し、各ピクセルに追加される値を要求します。
EXEC_STRING xwd -add %"Add value:"% -out %Arg_1"Filename:"%
引き数に対して次の構文を使用します。
%(String)Arg_n%
たとえば次の実行文字列は、コマンド lp -tbanner filename を使用して、ファイル名が入っているバナーとファイルを一緒に印刷します。
EXEC_STRING lp -t%(String)Arg_1% %(File)Arg_1"File to print:"%
次のように実行文字列にシェルを指定します。
/bin/sh -c 'command' /bin/ksh -c 'command' /bin/csh -c 'command'
さらに複雑な実行文字列で、シェルの処理を必要とし、ファイル引き数を受け取ります。
EXEC_STRING /bin/sh -c 'tbl %Arg_1"Man Page:"% | troff -man'
次の実行文字列では、引き数は圧縮ファイルである必要があります。アクションはファイルを圧縮解除し、lp -oraw を使用してそのファイルを印刷します。
EXEC_STRING /bin/sh -c 'cat %Arg_1 "File to print:"% | ¥ uncompress | lp -oraw'
アクションが複数のファイル引き数を処理するには、次の 3 つの方法があります。
アクションは繰り返し (各引き数に対しては 1 回ずつ) 実行できます。EXEC_STRING に単一のファイル引き数があり、アクション・アイコンに複数のファイルをドロップすることにより複数のファイル引き数が指定される場合、アクションはファイル引き数ごとに別々に実行されます。
たとえば、複数のファイル引き数が次のアクション定義に対して指定される場合、DisplayScreenImage アクションは繰り返し実行されます。
ACTION DisplayScreenImage { EXEC_STRING xwud -in %Arg_1% ... }
アクションは、2 つ以上の交換不可能なファイル引き数を使用できます。たとえば次の例では、特定の順番で並んでいる 2 つの一意のファイルが必要です。
xsetroot -cursor cursorfile maskfile
次の構文規約のいずれか 1 つを使用します。
アクションにファイル名をプロンプトさせる場合、ファイル引き数ごとに次の構文を使用します。
%(File)"prompt"%
引き数ごとに異なる prompt 文字列を使用します。
たとえば、次の実行文字列は 2 つのファイルをプロンプトします。
EXEC_STRING xsetroot -cursor %(File)"Cursor bitmap:"% ¥ %(File)"Mask bitmap:"%
ドロップされたファイルを受け取るには、各ファイル引き数に対して次の構文を使用します。
%Arg_n%
この場合、引き数ごとに異なる n 値を使用します。たとえば次のようになります。
EXEC_STRING diff %Arg_1% %Arg_2%
次の構文規約のいずれか 1 つを使用します。
ドロップされたファイルを受け取り、command file 1 file 2 ... という形式でコマンドを発行するアクションを作成するには、ファイル引き数に対して次の構文を使用します。
%Args%
複数のドロップされたファイルを受け取る、またはダブルクリックしたときに単一ファイルのプロンプトを表示するアクションを作成するには、ファイル引き数に対して次の構文を使用します。
%Arg_1"prompt"% %Args%
アクションは、command file 1 file 2 ... という形式でコマンドを発行します。
次の実行文字列は、前の例と似たアクションを作成しますが、この例のアクションをダブルクリックするとプロンプトを表示します (ファイル引き数はありません)。
EXEC_STRING pr %Arg_1"File(s) to print:"% %Args%
複数のドロップされたファイル引き数を受け取り、command file 1 file 2 ... という形式のコマンド行を実行するには、次の構文を使用します。
%Args%
次の実行文字列は、複数のファイルに対して Checkout という名前のスクリプトを実行します。
EXEC_STRING /usr/local/bin/Checkout ¥ %Arg_1"Check out what file?"% %Args%