# 手動によるアクションの作成アクション手動による作成

アクションを作成するには、次の２つの方法があります。

- アクション作成デスクトップ・アプリケーションを使用する

- 手動でアクション定義を作成する

手動でアクションを作成するには、データベース・ファイルを編集する必要があります。この章では、アクション定義を手動で作成する方法について説明します。

SAG.CrAct.div.3
SAG.CrAct.div.7
SAG.CrAct.div.19
SAG.CrAct.div.40
SAG.CrAct.div.44
SAG.CrAct.div.49
SAG.CrAct.div.52
SAG.CrAct.div.57
SAG.CrAct.div.61
SAG.CrAct.div.64

## 関連項目

- アクションの概要については、 SAG.IntAc.mkr.1 を参照してください。

- アクション作成ツールの使用の詳細については、 SAG.dtCrA.mkr.1 を参照してください。

- アクション定義の参照情報については、 `dtactionfile(4)` のマニュアル・ページを参照してください。

## 手動でアクションを作成しなければならない理由

アクションには次の３つの基本型があります。

- `COMMAND`

- `MAP`

- `TT_MSG`

アクション作成ツールは、 `COMMAND` アクションと `MAP` アクション型を作成するように設計されています。すべての `TT_MSG` アクションは手動で作成しなければなりません。

詳細については、 SAG.dtCrA.mkr.3 を参照してください。

### COMMAND アクション

コマンド・アクション は、アプリケーションまたはユーティリティを起動するコマンド、シェル・スクリプト、またはオペレーティング・システム・コマンドを実行します。アクションの定義には、実行されるコマンド `EXEC_STRING`) も含まれます。

アクション作成ツールは、コマンド・アクションのもっとも一般的な型を作成するときに使用できます。しかし、アクションを手動で作成しなければならない状況のときもあります。たとえば、アクションが次のものを指定する場合には、手動で `COMMAND` アクションを作成しなければなりません。

- 各引き数に対して異なるプロンプトをもつ複数のファイル用引き数

- アクション呼び出し — 他のアクションを呼び出すアクションの機能

- 引き数の数に依存する動作 — 異なる数のファイル引き数に対してさまざまな動作を行うアクションを作成する機能

- リモート実行ホスト — アクション定義をもっているシステム以外のシステムにあるアプリケーションを実行する機能

- ユーザの変更 — 異なるユーザとしてアクションを実行する機能（たとえば、root のパスワードをプロンプトしてから root として実行する）

### マップ・アクション

マップ・アクション は、コマンドや ToolTalk メッセージを直接指定すること以外の、別のアクションに「マップされる」アクションです。

マッピングは、アクションの代替名を指定する機能を提供します。たとえば、[アイコンエディタ]という名前の組み込みコマンド・アクションは、アイコン・エディタを起動します。データベースにも[開く]アクションが含まれていますが（`ARG_TYPE` フィールドによって）定義はビットマップ・ファイルとピックスマップ・ファイルに制限され、[アイコンエデイタ]アクションにマップされます。これにより、ユーザは、ファイル・マネージャのビットマップ・ファイルまたはピックスマップ・ファイルを選択してから[選択]メニューの[開く]を選択して、アイコン・エディタを起動できます。

アクション作成ツールは、[開く]アクションと[印刷]アクションの制限されたマッピングを提供します。その他のすべてのマップ・アクションは、手動で作成しなければなりません。

### TT_MSG (ToolTalk メッセージ) アクション

`TT_MSG` アクションは、ToolTalk メッセージを送信します。すべての `TT_MSG` アクションは手動で作成しなければなりません。

## 手動によるアクションの作成: 一般的な手順

この節では、アクション定義の構成ファイルを作成する方法について説明します。

### アクションの構成ファイル

アクション定義が入っている構成ファイルは、次の要件を満たしていなければなりません。

- ファイルは、name`.dt` という命名規則を使用しなければなりません。

- ファイルは、データベース（アクションとデータ型）検索パス上になければなりません。デフォルトの検索パスは次のとおりです。

  個人用アクション | HomeDirectory`/.dt/types`
  システム共通アクション | `/etc/dt/appconfig/types/`language
  組み込みアクション | `/usr/dt/appconfig/types/`language ただし、このディレクトリは使用しないでください。

アクションおよびデータ型検索パスの変更の詳細については、 SAG.Datab.mkr.6 を参照してください。

### 手動でアクションを作成するには

1. 既存のデータベース・ファイルを開くか、新規のデータベース・ファイルを作成します。 前節の SAG.CrAct.mkr.5 を参照してください。

2. 次の構文を使用してアクション定義を作成します。

       ACTION action_name
       {
        TYPE action_type
        action_field
        …
       }

   構文の意味を次に示します。

   action_name | アクションを実行するのに使用する名前
   action_type | `COMMAND` (デフォルト)、`MAP`、または `TT_MSG`
   action_field | この型のアクションの必須またはオプションとしてのフィールドのひとつ。すべてのフィールドは、キーワードと値から成ります。ほとんどのアクション・フィールドについて、この章で説明します。詳細については dtactionfile(4) のマニュアル・ページを参照してください。

3. ファイルを保存します。

4. アクション・アイコンが一意のイメージをもつようにするには、アクションのアイコンを作成します。アイコンのデフォルトの位置は次のとおりです。

   - 個人用アイコン: HomeDirectory`/.dt/icons`

   - システム共通アイコン: `/etc/dt/appconfig/icons/`language デフォルトの language は `C` です。

     詳細については、 SAG.CrAct.div.16 を参照してください。

5. [デスクトップツール]アプリケーション・グループにある[アクションの再読込み]をダブルクリックします。

6. アクションのアクション・ファイルを作成します。アクション・ファイルは、アクションを表すアイコンをファイル・マネージャまたはアプリケーション・マネージャに作成します（アクションがアプリケーションを起動するために作成される場合、アイコンを
   アプリケーション・アイコンと呼びます）。

   アクション・ファイルを作成するには、action_name と同じ名前の実行可能ファイルを作成します。書き込み権をもっているディレクトリにそのファイル を置くことができます。アクション・ファイルは好きな数だけ作成することができます。

### COMMAND アクションの作成例

次の手順は、リモート・システム AppServerA にあるファックス・アプリケーションを起動する個人用アクションを作成します。ファックス・アプリケーションを起動するためのコマンドは、次のとおりです。

    /usr/fax/bin/faxcompose [filename]

1. ファイル HomeDirectory`/.dt/types/Fax.dt` を作成します。

2. 次のアクション定義をファイルに記述します。

       ACTION FaxComposer
       {
        TYPE         COMMAND
        ICON         fax
        WINDOW_TYPE  NO_STDIO
        EXEC_STRING  /usr/fax/bin/faxcompose -c %Arg_1%
        EXEC_HOST       AppServerA
        DESCRIPTION  Runs the fax composer
       }

   `WINDOW_TYPE` フィールドと `EXEC_STRING` フィールドは、アクションの動作を説明します。

   `WINDOW_TYPE` | `NO_STDIO` キーワードは、アクションが端末エミュレータ・ウィンドウで実行する必要がないように指定します。 SAG.CrAct.div.41 を参照してください。
   `EXEC_STRING` | 構文 `%Arg_1%` はドロップされたファイルを受け取ります。アクション・アイコンをダブルクリックすると、アクションは空のファックス作成ウィンドウを開きます。 SAG.CrAct.div.19 を参照してください。

3. ファイルを保存します。

4. アイコン・エディタを使用して、HomeDirectory`/.dt/icons` ディレクトリに次のアイコン・イメージ・ファイルを作成します。

   - `fax.m.pm`、サイズ 32 × 32 ピクセル

   - `fax.t.pm`、サイズ 16 × 16 ピクセル

5. [デスクトップツール]アプリケーション・グループにある[アクションの再読込み]をダブルクリックします。

6. 書き込み権をもっているディレクトリ（たとえば、ホーム・ディレクトリ）に `FaxComposer` という名前の実行可能ファイルを作成します。

### MAP アクションの作成例

ファックス送信するファイルのほとんどがテキスト・エディタで作成され、データ型 TEXTFILE (フィイル名は *`.txt`) であるものとします。

次の手順は、データ型の[選択]メニューに Fax メニュー項目を追加します。

1. 前の例で作成したファイル HomeDirectory`/.dt/types/Fax.dt` を開きます。

2. 次のマップ・アクション定義をファイルに追加します。

       ACTION Fax
       {
        ARG_TYPE    TEXTFILE
        TYPE        MAP
        MAP_ACTION  FaxComposer
       }

3. ファイルを保存します。

4. TEXTFILE のデータ型属性定義を `/usr/dt/appconfig/types/`language`/dtpad.dt` から新規ファイル HomeDirectory`/.dt/types/textfile.dt` にコピーします。Fax アクションを `ACTIONS` フィールドに追加します。

       DATA_ATTRIBUTES TEXTFILE
       {
        ACTIONS  Open,Print,Fax
        ICON     Dtpenpd
        …
       }

5. ファイルを保存します。

6. アプリケーション・マネージャを開き、[デスクトップツール]アプリケーション・グループにある[アクションの再読込み]をダブルクリックします。

### アクションおよびデータ型データベースを再読み込みするには

新規または編集されたアクション定義を有効にするには、デスクトップはデータベースを再読み込みしなければなりません。

1. [デスクトップツール]アプリケーション・グループを開き、[アクションの再読込み]をダブルクリックします。

2. または、次のコマンドを実行します。

       dtaction ReloadActions

ReloadActions は、アイコンのラベルが[アクションの再読込み]であるアクション名です。

アクション・データベースは、次を行う場合にも再読み込みされます。

- ログインする

- ワークスペース・マネージャを再起動する

- [ファイル]メニューから[保存]を選択することにより[アクション作成]ウィンドウにあるアクションを保存する

### アクションのアクション・ファイル（アイコン）の作成

アクション・ファイル は、ファイル・マネージャまたはアプリケーション・マネージャにあるアクションを視覚的に表現するために作成されるファイルです。

#### アプリケーション・マネージャにある「アクション・ファイル」（「アクション・アイコン」または「アプリケーション・アイコン」とも呼ばれます）

アクション・ファイルのアイコンはアクションを表現するので、
アクション・アイコンと呼ぶこともあります。基本となるアクションがアプリケーションを起動する場合、アクション・ファイル・アイコンをアプリケーション・アイコンと呼びます。

アクション・アイコンをダブルクリックすると、アクションを実行します。アクション・アイコンはドロップ領域にもなります。

#### アクション・ファイル（アクション・アイコン）を作成するには

1. アクション名と同じ名前の実行可能ファイルを作成します。ファイルの内容は関係ありません。

たとえば、アクション定義が次のようになっている場合、アクション・ファイルは `MyFavoriteApp` という名前の実行可能ファイルになります。

    ACTION  MyFavoriteApp
    {
     EXEC_STRING    Mfa -file %Arg_1%
     DESCRIPTION    Runs MyFavoriteApp
     ICON           Mfapp
    }

ファイル・マネージャとアプリケーション・マネージャでは、`MyFavoriteApp` ファイルはアイコン・イメージ `Mfapp.`size`.`type を使用します。 `MyFavoriteApp` のアイコンをダブルクリックすると、アクションの実行文字列を実行し、アイコンのアイテムヘルプは `DESCRIPTION` フィールド (`Runs MyFavoriteApp`) の内容になります。

#### アクション・ラベル

アクション定義に `LABEL` フィールドが含まれている場合、ファイル・マネージャおよびアプリケーション・マネージャでは、ファイル名 (action_name) ではなく、このフィールドの内容によってアクション・ファイルにラベルが付けられます。たとえば、アクション定義に次のものが含まれる場合、アクション・アイコンには「Favorite Application」というラベルが付けられます。

    ACTION  MyFavoriteApp
    {
     LABEL      Favorite Application
     …
    }

### アクションが使用するアイコン・イメージの指定

`ICON` フィールドを使用して、アクション用に作成されたアクション・アイコン用にファイル・マネージャおよびアプリケーション・マネージャで使用されるアイコンを指定します。

アイコンを指定しないと、システムは
デフォルトのアクション・アイコン・イメージ・ファイル `/usr/dt/appconfig/icons/`language`/Dtactn.*` を使用します。

#### デフォルトのアクション・アイコン・イメージ

デフォルトのアクション・アイコンは、次のようなリソースを使用して変更できます。

    *actionIcon:    icon_file_name

icon_file_name は、ベース名または絶対パス名を指定できます。

`ICON` フィールドの値は次のようになります。

- ベース・ファイル名

  ベース・ファイル名は、アイコン・イメージが入っているファイル名からサイズ (`m` と `t`) およびイメージ型 (`bm` と `pm`) を表すファイル拡張子を取り除いたものです。たとえば、ファイル名が `GameIcon.m.pm` と `GameIcon.t.pm` の場合、`GameIcon` を使用します。

  ベース・ファイル名を使用する場合、アイコン・ファイルは次のアイコン検索パスにあるディレクトリになければなりません。

  - 個人用アイコン: HomeDirectory`/.dt/icons`

  - システム共通アイコン: `/etc/dt/appconfig/icons/`language

- アイコン・ファイルへの絶対パス。完全なファイル名も含まれます。

  アイコン・ファイルがアイコン絶対パス上にない場合にだけ絶対パスを使用してください。たとえば、アイコン・ファイル `GameIcon.m.pm` がディレクトリ `/doc/projects` にある場合、アイコン検索パスにはないので、`ICON` フィールドの値は `/doc/projects/GameIcon.m.pm` になります。

SAG.CrAct.tbl.1 は、作成しなければならないアイコンのサイズとそれに対応するファイル名の一覧です。

### アイコン名とアクション・アイコンのサイズ

`サイズ（ピクセル単位）` | `ビットマップ名` | `ピックスマップ名`
48 × 48 | name`.l.bm` | name`.l.pm`
32 × 32 | name`.m.bm` | name`.m.pm`
16 × 16 | name`.t.bm` | name`.t.pm`

### 既存のアクション定義を変更するには

システムのどの使用可能なアクション（組み込みアクションも含む）も変更できます。

組み込みアクション・データベースを変更するときは、注意してください。組み込みアクションは、デスクトップ・アプリケーションとよく動作するように設計されています。

1. 変更するアクション定義を検出します。

   アクション定義のデフォルトの位置は、次のとおりです。

   - 組み込みアクション: `/usr/dt/appconfig/types/`language

   - システム共通アクション: `/etc/dt/appconfig/types/`language

   - 個人用アクション: HomeDirectory`/.dt/types`

     システム位置が追加されている可能性もあります。アクション用にシステムが使用している位置のリストを参照するには、次のコマンドを実行します。

         dtsearchpath -v

     システムは、
     DTDATABASESEARCHPATH の下に表示されるディレクトリを使用しています。

2. 必要に応じて、アクション定義のテキストを次のいずれかのディレクトリにある新規または既存のファイルにコピーします。

   - システム共通アクション: `/etc/dt/appconfig/types/`language

   - 個人用アクション: HomeDirectory`/.dt/types`

     `/usr/dt/appconfig/types/`language ディレクトリにあるファイルの編集はできないため、組み込みアクションをコピーしなければなりません。

3. アクション定義を編集します。編集が終わったらファイルを保存します。

4. [デスクトップツール]アプリケーション・グループにある[アクションの再読込み]をダブルクリックします。

### アクション定義における優先順位

アクションを呼び出すと、システムはデータベースで一致するアクション名を検索します。その名前に対して２つ以上のアクションが存在する場合、システムはどちらを使用すべきかを決定するために優先規則を使用します。

- 他の優先規則が適用されない場合、優先順位は定義の位置に基づきます。次のリストは、優先度の高い順に並べてあります。

  - 個人用アクション (HomeDirectory`/.dt/types`)。

  - システム共通ローカル・アクション (`/etc/dt/appconfig/types/`language)。

  - システム共通リモート・アクション (hostname:`/etc/dt/appconfig/types/`language)。検索されたリモート・ホストは、アプリケーション検索パス上にあります。

  - 組み込みアクション (`/usr/dt/appconfig/types/`language)。

- 指定のディレクトリ内で、`*.dt` ファイルはアルファベット順に読み込まれます。

- `
  ARG_CLASS`、 `
  ARG_TYPE`、 `
  ARG_MODE`、または `
  ARG_COUNT` によって制限されたアクションは、制限されていないアクションよりも優先されます（これらの４つのフィールドのデフォルト値は `*` です）。

  ２つ以上の制限が適用される場合、優先順位の高い順に並べると次のようになります。

  - `ARG_CLASS`

  - `ARG_TYPE`

  - `ARG_MODE`

  - `ARG_COUNT`

  ２つ以上の制限された `ARG_COUNT` が存在する場合、優先順位の高い順に並べると次のようになります。

  - 特定の整数値 n

  - `<`n

  - `>`n

  - `*`

たとえば、次のアクション定義の一部分について考えてみます。

    ACTION EditGraphics
    # EditGraphics-1
    {
     ARG_TYPE    XWD
     …
    }
    ACTION EditGraphics
    # EditGraphics-2
    {
     ARG_COUNT      0
     …
    }
    ACTION EditGraphics
    # EditGraphics-3
    {
     ARG_TYPE    *
        …
    }

EditGraphics アクション・アイコンをダブルクリックすると、引き数が指定されず `ARG_COUNT` `0` が優先されるので EditGraphics-2 を起動します。XWD 型ファイル引き数を指定すると、XWD `ARG_TYPE` が優先されるので EditGraphics-1 が使用されます。EditGraphics-3 は、その他のファイル引き数すべてに対して使用されます。

## COMMAND アクションの実行文字列の作成

`
COMMAND` アクションには、必ず `ACTION` と `EXEC_STRING` の２つのフィールドが必要です。

    ACTION action_name
    {
        EXEC_STRING execution_string
    }

実行文字列は、`COMMAND` アクション定義のもっとも重要な部分です。この文字列は、[端末エミュレータ]ウインドウで実行するコマンド行と類似の構文を使用しますが、ファイルと文字列の引き数を処理するための追加構文も含みます。

### 実行文字列の一般的な機能

実行文字列には次のものが含まれています。

- ファイル引き数と非ファイル引き数

- シェル構文

- 実行可能ファイルの絶対パスまたは名前

#### アクション引き数

引き数は、コマンドまたはアプリケーションを適切に実行するのに必要な情報です。たとえば、テキスト・エディタにあるファイルを開くのに使用できるコマンド行について考えてみます。

    dtpad filename

このコマンドでは、filename は `dtpad` コマンドのファイル引き数です。

アプリケーションやコマンドのようにアクションは引き数をもつことができます。`COMMAND` アクションが使用できるデータ型は、次の２つです。

- ファイル

- 文字列データ

#### 実行文字列でのシェルの使用

実行文字列は、シェルを介してではなく直接実行されます。しかし、実行文字列でシェルを明示的に呼び出すことができます。

次に例を示します。

    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` に対しても同じ構文を使用します。

#### 例

- 次の実行文字列は、Ｘクライアント `xcutsel` を起動するアクションの一部です。

      EXEC_STRING xcutsel

- 次の実行文字列は、デジタル・クロックでクライアント `xclock` を起動します。コマンド行にはコマンド行オプションが含まれていますが、引き数は必要ありません。

      EXEC_STRING xclock -digital

### ドロップされたファイルを受け取るアクションの作成

ファイル引き数に対して、次のいずれかの構文を使用します。

    %Arg_n%

あるいは

    %(File)Arg_n%

`Arg_`n に指定された引き数は（デフォルトでは）ファイルとみなされるので、`(File)` はオプションになります。 (`%(String)Arg_`n`%` の構文の使用については、 SAG.CrAct.div.31 を参照してください。)

この構文により、アクション・アイコンにデータ・ファイル・オブジェクトをドロップし、そのファイル引き数でアクションを起動できます。コマンド行で n 番目の引き数を置き換えます。ローカル・ファイルまたはリモート・ファイルのどちらでも使用できます。

#### 例

- 次の実行文字列は、パラメータとしてドロップされたファイルを使用して、`wc -w` を実行します。

      EXEC_STRING wc -w %Arg_1%

- 次の例は、ディレクトリ引き数によってのみ動作するアクションのための定義の一部を示します。ディレクトリがアクション・アイコンにドロップされると、アクションは読み取り権および書き込み権の両方をもつディレクトリにあるすべてのファイルのリストを表示します。

      ACTION  List_Writable_Files
      {
          ARG_TYPE     FOLDER
          EXEC_STRING  /bin/sh -c 'ls -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 -t` banner 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 'ps | lp'

- 次はさらに複雑な実行文字列で、シェルの処理を必要とし、ファイル引き数を受け取ります。

    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'

- 次の実行文字列は、シェル・スクリプトを起動します。

    EXEC_STRING /usr/local/bin/StartGnuClient

### 複数のファイル引き数を処理する COMMAND アクションの作成

アクションが複数のファイル引き数を処理するには、次の３つの方法があります。

- アクションは繰り返し（各引き数に対しては１回ずつ）実行できます。`EXEC_STRING` に単一のファイル引き数があり、アクション・アイコンに複数のファイルをドロップすることにより複数のファイル引き数が指定される場合、アクションは各ファイル引き数ごとに別々に実行されます。

  たとえば、複数のファイル引き数が次のアクション定義に対して指定される場合、DisplayScreenImage アクションは繰り返し実行されます。

      ACTION DisplayScreenImage
      {
       EXEC_STRING  xwud -in %Arg_1%
       …
      }

- アクションは、２つ以上の交換不可能なファイル引き数を使用できます。たとえば、次の例では、特定の順番で並んでいる２つの一意のファイルが必要です。

      xsetroot -cursor cursorfile maskfile

- アクションは、各ファイル引き数で連続して同じコマンドを実行できます。たとえば、次の例では、１回の印刷ジョブで１つ以上のファイルを印刷します。

      pr file [file …]

#### 交換不可能な引き数を処理するアクションの作成

次の構文規約のいずれかひとつを使用します。

- アクションにファイル名をプロンプトさせる場合、各ファイル引き数ごとに次の構文を使用します。

      %(File)“prompt”%

  各引き数ごとに異なる prompt 文字列を使用します。

  たとえば、次の実行文字列は２つのファイルをプロンプトします。

      EXEC_STRING  xsetroot -cursor %(File)“Cursor bitmap:”% \
                   %(File)“Mask bitmap:”%

- ドロップされたファイルを受け取るには、各ファイル引き数に対して次の構文を使用します。

      %Arg_n%

  この場合、各引き数ごとに異なる n の値を使用します。次に例を示します。

      EXEC_STRING  diff %Arg_1% %Arg_2%

#### 交換可能なファイル引き数を処理するアクションの作成

次の構文規約のいずれかひとつを使用します。

- ドロップされたファイルを受け取り、command file 1 file 2 … という形式でコマンドを発行するアクションを作成するには、ファイル引き数に対して次の構文を使用します。

      %Args%

- 複数のドロップされたファイルを受け取る、またはダブルクリックしたときに単一ファイルのプロンプトを表示するアクションを作成するには、ファイル引き数に対して次の構文を使用します。

      %Arg_1“prompt”% %Args%

  アクションは、command file 1 file 2 … という形式でコマンドを発行します。

##### 例

- 次の実行文字列は、複数のファイル引き数をもつアクションを作成します。

      EXEC_STRING pr %Args%

  この実行文字列は、次のコマンド行を実行します。

      pr file1 file2

- 次の実行文字列は、前の例と似たアクションを作成しますが、この例のアクションをダブルクリックすると、プロンプトを表示します（ファイル引き数はありません）。

    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%

- 次の実行文字列は、複数のファイルに対して `lp -oraw` を実行します。

    EXEC_STRING  lp -oraw %Arg_1“File to print:”% %Args%

## COMMAND アクションのウィンドウ・サポートと端末エミュレータ

`COMMAND` アクションがデスクトップ上でウィンドウをサポートするには、次の方法があります。

- アプリケーションがそれ自身のウィンドウをもっている場合、追加のウィンドウ・サポートを提供しないようにアクションに書き込むことができます。このオプションは、直接ユーザ入力を必要とせず、出力をもっていないコマンドをアクションが実行するときにも使用されます。

- アプリケーションを端末エミュレータ・ウィンドウで実行しなければならない場合、ウィンドウを開いてからアプリケーションを実行するようにアクションに書き込むことができます。この場合、いくつかの端末オプションがあります。

### アクションのウィンドウ・サポートの指定

`WINDOW_TYPE` フィールドを使用して、アクションが必要とするウィンドウ・サポートの型を指定します。

WINDOW_TYPE | 提供されるウィンドウ・サポート
`NO_STDIO` | 提供されません。アプリケーションがそれ自身のウィンドウをもっているか、コマンドが表示できる出力をもっていない場合、`NO_STDIO` を使用します。
`PERM_TERMINAL` | 常時端末エミュレータ・ウィンドウ。アクションは端末ウィンドウを開き、明示的に閉じるまで開いたままにします。ウィンドウにデータを入力できます。入力を行い、出力を作成し、その後終了するコマンド（たとえば `ls` directory）で使用します。
`TERMINAL` | 一時端末エミュレータ・ウィンドウ。アクションは端末ウィンドウを開き、コマンドが完了するとすぐに閉じます。全画面コマンド（たとえば `vi`）で使用します。

### 端末エミュレータのコマンド行オプションの指定

アクション定義にある `TERM_OPTS` フィールドを使用して、端末エミュレータのコマンド行オプションを指定します。

たとえば、次のアクションは実行ホストをプロンプトします。

    ACTION OpenTermOnSystemUserChooses
    {
     WINDOW_TYPE    PERM_TERMINAL
     EXEC_HOST      %(String)“Remote terminal on:”%
     TERM_OPTS      -title %(String)“Window title:”%
     EXEC_STRING    $SHELL
    }

### 他のデフォルト端末エミュレータの指定

アクションが使用するデフォルトの端末エミュレータは、`dtterm` です。これを別の端末エミュレータに変更できます。デフォルトの端末エミュレータは、アクションが使用する端末エミュレータを明示的に指定しないときに使用されます。

アクションが使用する端末エミュレータは、次のコマンド行オプションをもっていなければなりません。

- `-title` window_title

- `-e` command

次の２つのリソースは、アクションが使用するデフォルトの端末エミュレータを決定します。

- `localTerminal` リソースは、ローカル・アプリケーションが使用する端末エミュレータを指定します。

      *localTerminal:    terminal

  次に例を示します。

  *localTerminal: xterm

- `remoteTerminal` リソースは、リモート・アプリケーションが使用する端末エミュレータを指定します。

      *remoteTerminal:   host:terminal [,host:terminal…]

  次に例を示します。

      *remoteTerminal: sysibm1:/usr/bin/xterm,syshp2:/usr/bin/yterm

## 特定の引き数へのアクションの制限

特定の型の引き数にアクションを制限すると、アクションが改良されます。たとえば、PostScript ファイル引き数に対してのみ PostScript ファイルのビューアを呼び出すようにアクションを制限すると有用です。つまり制限があると、PostScript ファイル以外を指定したときに、アクションはエラー・ダイアログを返してきます。

次のことに基づいてアクションを制限することができます。

- ファイル引き数のデータ型。

- ファイル引き数の数 — たとえば、引き数なしとひとつ以上の引き数を指定する場合とでは、アクション・アイコンのドロップ・アンド・ダブルクリック動作が異なります。

- 引き数の読み取りまたは書き込みモード。

### 指定されたデータ型へのアクションの制限

`ARG_TYPE` フィールドを使用して、アクションが有効であるデータ型を指定します。データ属性名を使用します。

コンマでエントリを区切ってデータ型のリストを入力することができます。

たとえば、次のアクション定義は Gif データ型が作成されたとした場合の例です。

    ACTION Open_Gif
    {
     TYPE           COMMAND
     LABEL          “Display Gif”
     WINDOW_TYPE    NO_STDIO
     ARG_TYPE       Gif
     ICON           xgif
     DESCRIPTION    Displays gif files
     EXEC_STRING    xgif
    }

### 引き数の数に基づいたアクションの制限

`ARG_COUNT` フィールドを使用して、アクションが受け入れることができる引き数の数を指定します。有効な値は次のとおりです。

`*` | (デフォルト) 任意の数の引き数。その他の値は `*` よりも優先されます。
n | 任意の負でない値（0 を含む）。
`>`n | n よりも大きい引き数。
`<`n | n よりも小さい引き数。

`ARG_COUNT` の使用方法のひとつは、アイコンをダブルクリックするか、あるいはそのアイコンにファイルをドロップするかに応じて、異なるアクション・アイコン動作を提供することです。次節の SAG.CrAct.div.47 を参照してください。

### 異なるダブルクリックとドロップ動作を提供するには

次の手順を使用してドロップされたファイルを受け取るアクションを作成しますが、アクション・アイコンをダブルクリックしてもファイルを要求しません。

1. ダブルクリック機能のためのアクション定義を作成します。

   `ARG_COUNT` フィールドを使用して引き数 `0` を指定します。ドロップされた引き数を受け取らない `EXEC_STRING` の構文を使用します。

2. ドロップ機能のための２番目のアクション定義を作成します。

   `ARG_COUNT` フィールドを使用して引き数 `>0` を指定します。ドロップされたファイルを受け取る `EXEC_STRING` の構文を使用します。

たとえば、次の２つのコマンド行は `vedit` という名前のエディタを起動するのに使用できるものとします。

- ファイル引き数を使用しないでエディタを起動するには、次のようにします。

      vedit

- 読み込み専用ドキュメントとして開かれるファイル引き数でエディタを起動するには、次のようにします。

      vedit -R filename

次の２つのアクションは、Vedit という名前のアクションのためのドロップとダブルクリック機能を作成します。`ARG_COUNT` `0` は暗黙的なドロップ機能定義の `ARG_COUNT` `*` よりも明確なので、データベースで一致するものを検索するときには最初のアクションが優先されます。

    # Double-click functionality
    ACTION Vedit
    {
     TYPE         COMMAND
     ARG_COUNT    0
     WINDOW_TYPE  PERM_TERMINAL
     EXEC_STRING  vedit
    }

    # Drop functionality
    ACTION Vedit
    {
     TYPE          COMMAND
     WINDOW_TYPE   PERM_TERMINAL
     EXEC_STRING   vedit -R %Arg_1%
    }

### 引き数のモードに基づいたアクションの制限

`ARG_MODE` フィールドを使用して、引き数の読み込みまたは書き込みモードを指定します。有効な値は、次のとおりです。

`*` | (デフォルト) 任意のモード
`!w` | 書き込み不可
`w` | 書き込み可

## リモート・システムでアプリケーションを実行するアクションの作成

アクションとリモート実行について説明する場合、次の２つの用語がよく使用されます。

データベース・ホスト | アクション定義が入っているシステム
実行ホスト | 実行可能ファイルを実行するシステム

ほとんどの場合、アクションとそのアプリケーションは同じシステム上にあります。つまり、アクションのデフォルトの実行ホストはデータベース・ホストであるため、特別な構文は必要ありません。

しかし、実行ホストがデータベース・ホストとは異なる場合、アクション定義はどこで実行文字列を実行するのか指定しなければなりません。

異なるシステム上にアクションとアプリケーションを配置するための機能は、デスクトップのクライアント/サーバ・アーキテクチャの一部です。ネットワーク・アプリケーションの詳細な説明については、 SAG.ClSrv.mkr.15 を参照してください。

### リモート・アプリケーションを実行するアクションの作成

アクション定義 `EXEC_HOST` フィールドを使用して、アプリケーションの位置を指定します。

`EXEC_HOST` の有効な値は次のとおりです。

`%DatabaseHost%` | アクションが定義されるホスト。
`%LocalHost%` | アクションが呼び出されるホスト (セッション・サーバ)。
`%DisplayHost%` | Ｘサーバを実行中のホスト (Ｘ端末では使用できません)。
`%SessionHost%` | コントロールを行うログイン・マネージャが実行中のホスト。
hostname | 名前付きホスト。アクションがひとつの特定ホスト上に必ず呼び出される環境でこの値を使用します。
`%“`prompt`”%` | アクションが呼び出されるたびにホスト名をプロンプトします。

デフォルト値は、`%DatabaseHost%`、`%LocalHost%` です。
したがって、`EXEC_HOST` フィールドが削除されると、アクションはアクション定義が入っているホストでコマンドの実行を最初に試みます。これに失敗すると、アクションはセッション・サーバでコマンドの実行を試みます。

#### 例

- このフィールドは、ホスト `ddsyd` を指定します。

    EXEC_HOST  ddsyd

- このフィールドは、ホスト名をプロンプトします。

    EXEC_HOST  %“Host containing application:”%

- このフィールドは、アクション定義が入っているホストでアプリケーションの実行をアクションが試みるように指定します。これに失敗すると、アクションはホスト `ddsyd` でアプリケーションの実行を試みます。

    EXEC_HOST  %DatabaseHost%, ddsyd

## アクションおよびデータ型定義における変数の使用

文字列変数と環境変数をアクションおよびデータ型定義ファイルに含むことができます。

### アクションにおける文字列変数の使用

文字列変数定義は、定義の位置からファイルの最後まで有効です。データベース用のグローバルな文字列変数はありません。

文字列変数と環境変数が同じ名前の場合、文字列変数が優先されます。

#### 文字列変数を定義するには

1. 次の構文を使用します。

       set variable_name=value

変数名に英数字と下線文字 (`_`) を使用できます。各変数定義は別の行になければなりません。

次に例を示します。

    set Remote_Application_Server=sysapp
    set Remote_File_Server=sysdata

#### 文字列変数を参照するには

1. 次の構文を使用します。

       $[{]variable_name[}]

次に例を示します。

    EXEC-HOST   $Remote_Application_Server
    CWD   /net/${Remote_File_Server}/doc/project

### アクションおよびデータ型における環境変数の使用

1. 次の構文を使用して環境変数を参照します。

       $[{]variable[}].

データベースが読み込まれると変数は拡張されます（その値に置き換えられます）。文字列変数と環境変数が同じ名前の場合、文字列変数が優先されます。

たとえば、次の実行文字列はログイン名が入っているバナーでファイルを印刷します。

    EXEC-STRING lp -t$LOGNAME %(File)Arg_1%

## コマンド行からのアクションの呼び出し

デスクトップは、コマンド行からアクションを実行するための `dtaction` コマンドを提供します。`dtaction` を使用して次の部分からアクションを実行できます。

- スクリプト

- 他のアクション

- 端末エミュレータ・コマンド行

### dtaction の構文

    dtaction [-user user_name] [-execHost hostname] action_name [argument [argument]…]

`-user` user_name | 別のユーザとしてアクションを実行するための機能を提供します。`dtaction` が user_name 以外のユーザによって呼び出される場合、パスワードのプロンプトが表示されます。
-`execHost` hostname | `COMMAND` アクションの場合のみ。コマンドが実行されるホストを指定します。
argument | アクションに対する引き数。通常はファイル引き数です。

`dtaction` クライアントは追加のコマンド行オプションをもっています。詳細については、`dtaction`(1) のマニュアル・ページを参照してください。

### 異なるアクションを実行するアクションの作成

アクションの `EXEC_STRING` にある `dtaction` を使用します。

たとえば、次のアクションは Spell という名前の組み込みアクション（アクションはアプリケーション・マネージャで「スペルチェック」というラベルが付けられています）を使用します。新規アクションはテキスト・エディタと Spell アクションを実行し、別の端末エミュレータ・ウィンドウにスペルミスを表示します。

    ACTION EditAndSpell
    {
     WINDOW_TYPE    NO_STDIO
     EXEC_STRING    /bin/sh -c 'dtaction Spell \
         %Arg_1“File:”%; dtpad %Arg_1%'
    }

### 別のユーザとして実行するアクションの作成

`EXEC_STRING` にある次の構文を使用します。

    EXEC_STRING   dtaction -user user_name action_name [file_argument]

新規ユーザ (user_name) は、次のいずれかの機構を介してシステムへのディスプレイ・アクセスをもたなければなりません。

- ログイン・ユーザの `.Xauthority` ファイルにある読み取り権

- あるいは、xhost アクセス権

たとえば、次の２つのアクションは、root になるための機能と app-defaults ファイルを編集するための機能を提供します。

    ACTION AppDefaults
    {
     WINDOW_TYPE  NO_STDIO
     EXEC_STRING  /usr/dt/bin/dtaction -user root \
                  EditAppDefaults %Arg_1“File:”%
    }
    ACTION EditAppDefaults
    {
     WINDOW_TYPE  TERMINAL
     EXEC_STRING  /bin/sh -c 'chmod +w %Arg_1%; \
                  vi %Arg_1%; chmod -w %Arg_1%'
    }

## ローカライズされたアクションの作成

データ型の検索パスには言語に依存する位置も含まれています。デスクトップは、LANG の値を使用して、データ型定義が検索される位置を決定します。

### ローカライズされたアクションの位置

ローカライズされたアクション定義は、アクション検索パスに応じて適切な言語に依存するディレクトリに置かなければなりません。

デフォルトの検索パスは次のとおりです。

- 個人用アクション: HomeDirectory`/.dt/types`

- システム共通アクション: `/etc/dt/appconfig/types/`language

- 組み込みアクション: `/usr/dt/appconfig/types/`language

### 既存のアクションをローカライズするには

1. 適切な言語に依存するディレクトリ（たとえば `/etc/dt/appconfig/types/japanese`）にファイルをコピーします。

2. アクション定義を言語に依存する構成ファイルにコピーします。

   たとえば、アクション定義を app_root/dt/appconfig/types/C/file.dt から app_root/dt/appconfig/types/japanese/newfile.dt にコピーします。

3. `LABEL` フィールドを追加するか、既存の `LABEL` フィールドを変更します。

       LABEL   string

   アプリケーション・マネージャとファイル・マネージャは、ラベル文字列を使用してアクションのアイコンを識別します。

4. アクション定義にある次のいずれかのフィールドをローカライズします。

   - ローカライズされたアイコンの場合: `ICON`

   - ローカライズされたアイテムヘルプの場合: `DESCRIPTION`

   - ローカライズされたプロンプトの場合: `EXEC_STRING` にある引用符で囲まれたテキスト

## ToolTalk アプリケーションのアクションの作成

次の情報は、ToolTalk メッセージをサポートするアプリケーションに対してのみ適用されます。

`TT_MSG` アクション型を使用して、ToolTalk メッセージを送信するアクションを作成します。

    ACTION action_name
    {
     TYPE  TT_MSG
     …
    }

### addressing フィールドと disposition フィールド

- ToolTalk `addressing` フィールドは、常に `TT_PROCEDURE` に設定されます。

- ToolTalk `disposition` フィールドは、静的メッセージ・パターンの指定がデフォルトの値です。

#### サポートされていないメッセージ

`TT_MSG` 型アクションがサポートしていないものは、次のとおりです。

- ToolTalk オブジェクト指向メッセージ

- メッセージ内のコンテキスト引き数

#### TT_MSG アクションのキーワード

キーワード | 使用目的
`TT_CLASS` | ToolTalk `class` メッセージ・フィールドの値を定義します。
`TT_SCOPE` | ToolTalk `scope` メッセージ・フィールドの値を定義します。
`TT_OPERATION` | ToolTalk `operation` メッセージ・フィールドの値を定義します。
`TT_FILE` | ToolTalk `file` メッセージ・フィールドの値を定義します。
`TT_ARGn_MODE` | n 番目のメッセージ引き数の ToolTalk `mode` 属性の値を定義します。
`TT_ARGn_VTYPE` | n 番目のメッセージ引き数の ToolTalk `vtype` 属性の値を定義します。
`TT_ARGn_VALUE` | n 番目のメッセージ引き数の値を定義します。