Solaris 公用桌面环境: 高级用户和系统管理员指南

第 12 章 手动创建动作

创建动作有下列两种方法:

手动创建动作需要编辑数据库文件。本章主要描述如何手动创建动作的定义。

必须手动创建动作的理由

共有三种类型的基本动作:

"创建动作"工具设计用来创建一些特定的COMMANDMAP动作。所有TT_MSG动作都必须手动创建。

关于进一步信息,请参阅"创建动作的限制"

COMMAND 动作

command 动作执行命令,该命令启动应用程序或实用程序、运行shell正文或执行操作系统命令。 动作的定义包括要执行的命令 (EXEC_STRING)。

"创建动作"工具能用于创建最为常见类型的命令动作。不过有时也可能必须手动来 创建动作。例如,如果动作中有以下指定就必须手动创建COMMAND 动作:

MAP 动作

映射动作不直接指定命令或 ToolTalk 消息, 而是"映射"到另一个动作

"映射"能为动作定义替代名。例如,名为 IconEditor 的内置命令动作启动 图标编辑器;在数据库中同时还有限于位图和象素图文件(由ARG_TYPE字段定义)的"打开"动作被映射到 IconEditor 动作。这使用户可以通过在"文件管理器"中选择位图或象素图文件并在"选定"菜单中选择"打开"来启动"图标编辑器"。

"创建动作"能为"打开"和"打印"动作提供有限的映射功能,但其它所有动作的映射都必须手动创建。

TT_MSG (ToolTalk 消息)动作

TT_MSG动作发送 ToolTalk 消息。所有TT_MSG动作都必须手动创建。

手动创建动作:一般步骤

本节介绍如何为动作定义创建配置文件。

动作的配置文件

包含动作定义的配置文件必须满足下列要求:

关于更改动作/数据类型搜索路径的信息,请参阅"设置搜索路径的值"

手动创建动作

  1. 打开现有的数据库文件或创建新文件。

    请参阅上一节"动作的配置文件"

  2. 使用如下语法创建动作的定义:

    ACTIONaction_name
      {
       TYPE  action_type
            action_field
       ...
      }

    其中:

    action_name-运行动作所用的名称。

    action_type-COMMAND(缺省值)、MAP 或 TT_MSG

    action_field-该类 动作所需或任选的字段之一。所有字段都由关键字和值组成。

    本章讨论多种动作字段。关于动作字段的进一步信息,请参阅dtactionfile(4) 的手册页。

  3. 保存文件。

  4. 如果动作图标需要专用图像,请自己为动作创建图标。图标的缺省位置为:

    • 个人图标:HomeDirectory/.dt/icons

  5. 在 Desktop_Tools 应用程序组中双击"重新装入动作"。

  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_TYPEEXEC_STRING 描述 了动作的特性。

    WINDOW_TYPE-NO_STDIO 关键字指定该动作不一定非在终端仿真程序窗口中运行不可。

    请参阅"为动作指定窗口支持"

    EXEC_STRING-语法%Arg _1%接受放置的文件。如果双击动作图标,将打开空的传真创作器窗口。

    请参阅"为 COMMAND 动作建立执行字符串"

  3. 保存文件。

  4. 用"图标编辑器"在HomeDirectory/.dt/icons 目录 中创建下列图标图像文件:

    • fax.m.pm, 大小为 32 乘 32 象素

    • fax.t.pm, 大小为 16 乘 16 象素

  5. 在 Desktop_Tools 应用程序组中双击"重新装入动作"。

  6. 在具有可写许可的目录中创建名为FaxComposer 的可执行文件(例如, 起始目录)。

创建 MAP 动作的示例

假设绝大部分传真文件用"文本编辑器"创建,而且属于数据类型 TEXTFILE (文件名为 *.txt)。

下列步骤在数据类型的"选定"菜单中加入"传真"目录项。

  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。在ACTIONS字段中加入"传真"动作。

    DATA_ATTRIBUTES TEXTFILE
      {
       ACTIONS     Open,Print,Fax
       ICON       Dtpenpd
       ...
      }
  5. 保存文件。

  6. 打开应用程序管理器,在 Desktop_Tools 应用程序组中双击"重新装入动作"。

重新装入动作/数据类型数据库

为使新的或经过编辑的动作定义有效, 桌面必须重新读取数据库。

    打开 Desktop_Tools 应用程序组,双击"重新装入动作"。

    或者,执行下列命令:

    	dtaction ReloadActions

    ReloadActions 是图标的标签为"重新装入动作"的动作的名称。

    当用户进行下列操作时,动作数据库也会被重新读取:

    • 登录

    • 重新启动工作区管理器

    • 在"创建动作"窗口的"文件"菜单内选择"保存"来保存动作

为动作创建动作文件(图标)

动作文件是在"文件管理器"或"应用程序管理器"中 提供动作的可视表象的文件。

图形 12-1 应用程序管理器中的动作文件(动作图标)

Graphic

由于动作文件的图标代表动作,因此有时也被称为动作图标。如果其所蕴含的动作启动 应用程序,则动作文件图标也被称为应用程序图标

双击动作图标来运行动作。动作图标同时也可能是放置区。

创建动作文件(动作图标)

    创建与动作同名的可执行文件,文件的内容 无关紧要。

例如,动作的定义如下:

ACTIONMyFavoriteApp
 {
   EXEC_STRING      Mfa -file%Arg _1%
   DESCRIPTION      Runs MyFavoriteApp
   ICON          Mfapp
 }

此时,动作文件是名为MyFavoriteApp的可执行文件。 在"文件管理器"和"应用程序管理器"中,MyFavoriteApp 文件使用的图标图像名为Mfapp.size.type。双击MyFavoriteApp 的图标,此时会运行动作的执行字符串,并且图标的"项目"帮助就是DESCRIPTION字段所包含的内容("运行MyFavoriteApp")。

动作标签

如果动作定义中包含LABEL字段,"文件管理器"和"应用程序 管理器"中动作文件的标签将不与文件名 (action_name) 相同,而是上述字段中定义的标签。例如,如果动作定义中包含下列定义:

ACTIONMyFavoriteApp
 {
   LABEL      Favorite Application
   ...
 }

此时动作图标的标记为"喜爱的应用程序"。

指定"动作所用的图标图像"

ICON字段来指定"文件管理器"和 "应用程序管理器"中所使用的图标是为动作创建的动作图标。

如果未指定图标,系统将使用缺省的动作图标的图像文件/usr/dt/appconfig/icons/language/Dtactn.*

图形 12-2 缺省的动作图标图像

Graphic

缺省的动作图标可使用下列资源加以更改:

*actionIcon:icon_file_name

其中icon_file_name可以是基本名称或绝对路径。

ICON字段可以取下列值:

表 12-1 动作图标的图标名和图标大小

象素大小 

位图名 

象素图名 

48 乘 48 

名称.l.bm

名称.l.pm

32 乘 32 

名称.m.bm

名称.m.pm

16 乘 16 

名称.t.bm

名称.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. 编辑完毕后请保存文件。

  5. 在 Desktop_Tools 应用程序组中双击"重新装入动作"。

动作定义中的优先级

当用户调用动作时,系统在数据库中搜索匹配的动作名。如果存在多个动作,系统则利用 优先级规则来决定使用哪个动作。

为 COMMAND 动作建立执行字符串

COMMAND动作至少需要两个字段 -ACTIONEXEC_STRING

ACTIONaction_name
 {
    EXEC_STRINGexecution_string
 }

执行字符串是COMMAND动作定义中最重要的部分。它使用的语法与在"终端"仿真器窗口内执行的 命令行相似,但包含了用于处理文件和字符串变量的附加语法。

执行字符串的一般特性

执行字符串可以包括:

动作参数

参数是命令或应用程序正确运行所需要的信息。例如,考虑这样一个命令行,可能会用它来在"文本编辑器" 中打开文件:

dtpad文件名

在该命令中,文件名dtpad 命令 的文件参数。

象应用程序和命令一样,动作也可以有参数。COMMAND 动作可以使用两种类型的数据:

在执行字符串中使用shell

执行字符串一般不经过shell就直接执行。但是,也可以明确地在执行字符串中调用shell。

例如:

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使用象从命令行启动应用程序 一样的语法。

示例

创建接受放置文件的动作

对文件参数使用如下语法:

%Arg_n%

%(File)Arg_n%

(File)是可选项,因为为Arg_n 提供的参数(缺省)假定为文件。(请查看"将文件参数解释成字符串",以获得% (String)Arg_n% 语法的使用方法。)

该语法使用户可以通过在动作图标上放置数据文件对象来启动以该文件为参数的动作。它取代了 命令行中第n个参数。放置文件可以是本地文件或远程文件。

示例

创建提示输入文件参数的动作

文件参数使用如下语法:

%(File) "提示"%

该语法创建了一动作,该动作在用户双击动作图标时提示输入文件名。

例如,下列执行字符串显示对话框,提示输入wc-w命令的文件参数:

EXEC_STRING wc -w% (File)"Count words in file:"%

创建接受或提示输入放置文件的动作

文件参数使用如下语法:

%Arg_n"提示"%

%(File)Arg_n"提示"%

该语法产生的动作:

创建提示输入非文件参数的动作

对非文件参数使用如下语法:

%"提示"%

%(String) "提示"%

由于缺省情况下,引号内的文本被解释为字符串,所以 (String)是 可选项。该语法显示对话框,提示输入非文件数据;如果提示输入文件名就不能用该语法。

例如,下列执行字符串运行xwd命令,并提示输入每个象素要增加的值:

EXEC_STRING xwd -add% "增加值:"% -out%Arg _1"文件名:"%

将文件参数解释成字符串

参数使用如下语法:

%(String)Arg_n%

例如,下列执行字符串用于打印文件,并具有包含文件名的标识,所用命令为lp-t标识文件名。

EXEC_STRING lp -t%(String)Arg_1%% (File)Arg_1"File to 
print:"%

在动作中提供shell功能

在执行字符串中指定shell:

/bin/sh -c 'command' /bin/ksh 
-c 'command' /bin/csh -c 'command'

示例

创建能接受多文件参数的 COMMAND 动作

动作有三种处理多文件参数的方法:

为不可互换参数创建动作

采用下列语法惯例之一:

用可交换的文件参数来创建动作

采用下列语法惯例之一:

示例

创建接受多重放置文件的动作

要接受多重放置文件并以下列形式执行命令行:

commandfile 
1file 2...

使用如下语法:

%Args%

示例

用于 COMMAND 动作的窗口支持和终端仿真程序

COMMAND动作有以下几种支持桌面窗口的方法。

为动作指定窗口支持

使用WINDOW_TYPE字段来指定动作所要求的窗口支持的类型, 如表 12-2所示。

表 12-2 WINDOW_TYPE 字段和提供的窗口支持

WINDOW_TYPE

提供的窗口支持 

NO_STDIO

无。如果应用程序有自己的窗口,或命令无可见输出时,使用NO_STDIO选项。

PERM_TERMINAL

永久的终端仿真程序窗口。此动作可打开终端窗口,该窗口在用户明确地关闭之前一直开着,用户可以在窗口内输 入数据。此选项用于带有输入,并产生 输出的命令,然后终止(例如,ls目录)的情况。

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。 可以将其改为另一终端仿真程序。如果没有明确 地指定终端仿真程序,动作将使用缺省终端仿真程序。

动作所使用的终端仿真程序必须有下列命令行选项。

限定动作使用某些参数

限定动作使用某种特定类型的参数可以改善动作的 性能。例如,调用 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的一个用途是可以根据用户的双击 图标操作或在图标上放置一个文件来提供不同的动作图标性能。请参阅下一节,"提供不同的 双击和放置性能"

提供不同的双击和放置特性

按此步骤来创建接受放置文件的动作,但当双击动作图标时,并不提示输入文件。

  1. 为双击功能创建动作定义。

    ARG_COUNT字段来指定0 参数。 对不接受放置变量的EXEC_STRING,使用语法。

  2. 为放置功能创建第二个动作定义。

    ARG_COUNT字段来指定>0 参数。对接受放置文件的EXEC_STRING,使用语法。

    例如,假设下列两个命令行能用于启动 名为vedit 的编辑器:

    • 不带文件参数启动编辑器:

      	vedit
    • 带文件参数启动编辑器,文件以只读方式 打开:

      	vedit -Rfilename
      

      下列两个动作为名为 Vedit 的动作分别创建放置 和双击功能。因为ARG_COUNT0比放置功能暗示的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-可写

创建在远程系统上运行应用程序的动作

在讨论动作和远程执行时经常要使用的两个术语:

数据库主机-包含动作定义的系统

执行主机-运行可执行文件的系统

在大多数情况下,动作和应用程序位于同一系统 上;由于动作的缺省执行主机与数据库主机 相同,因此不需要特殊的语法。

但是,当执行主机与数据库主机不同 时,动作定义必须指定执行字符串在哪 个主机上运行。

在不同系统上定位动作和应用程序的能力是 桌面的客户/服务器结构的一部分。关于网络 应用更深层次的讨论,请参阅 "管理应用程序服务"

创建运行远程应用程序的动作

使用动作定义的 EXEC_HOST 字段来指定 应用程序的位置。

EXEC_HOST 的有效值为:

%DatabaseHost%-定义了动作的主机。

%LocalHost%-调用了动作的主机(会话服务器)。

%DisplayHost%-运行 X 服务器的主机(不可以是 X 终端)。

%SessionHost%-运行控制性登录管理器的主机。

hostname-命名的主机。当动作只能在一 台特定主机上调用时,使用此值作为环境变量。

%"提示"%-在每次调用动作时,提示用户 输入主机名。

缺省值为 %DatabaseHost%%LocalHost%。这样,当EXEC_HOST 字段 被省略时,动作首先试图在包含动作定义的主机上 运行命令。如果失败,动作再试图在会话服务器 上运行命令。

示例

在动作和数据类型定义中使用变量

在动作和数据类型的定义文件中,可以使用 字符串变量和环境变量。

在动作中使用字符串变量

字符串变量定义只在定义位置至文件尾 之间有效。数据库没有全局的字符串变 量。

如果字符串变量和环境变量同名,字符串 变量的优先级高。

定义字符串变量

    使用如下语法:

	set variable_name=value

变量名可以使用任意字母字符和下划线 (_)。 每个变量的定义必须单独占一行。

例如:

set Remote_Application_Server=sysapp set Remote_File_Server=sysdata

引用字符串变量

    使用如下语法:

	$[{]variable_name[]

例如:

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

在动作和数据类型中使用环境变量

    使用如下语法来引用环境变量:

	$[{]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-提供以另一用户身份 运行动作的能力。如果 dtactionuser_name 以外的用户调用,将显示提示符指示输入密码。

-execHost hostname-仅适用于 COMMAND 动作; 指定将要运行命令的主机。

argument-动作的参数;通常是文件参数。

dtaction 客户程序还有其它的命令行选项。关于 进一步的信息,请参阅 dtaction(1) 手册页。

创建运行另一个动作的动作

dtaction 用在动作的 EXEC_STRING 中。

例如,下列动作使用名为"拼写"的内置动作( 该动作在应用程序管理器中的标签是 ``检查拼写'')。 新的动作运行"文本编辑器"和"拼写"动作,并在单独的终端仿真程序 窗口内显示拼写错误。

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) 必须通过下列机制之一 才能对本系统进行显示访问:

创建本地化的动作

数据类型的搜索路径包括与语言相关的位置。 桌面利用 LANG 值来确定搜索数据类型定义 的位置。

本地化动作的位置

本地化动作的定义必须放置在位于动作搜索 路径内的合适的语言目录中。

缺省的搜索路径为:

对现有的动作本地化

  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
  ... 	
}
  

寻址disposition 字段

不支持的消息

TT_MSG 型动作不支持下列消息:

TT_MSG 动作的关键字

表 12-3显示 TT_MSG 动作的关键字及其用法。

表 12-3 TT_MSG 动作关键字及其用法

关键字 

用法 

TT_CLASS

定义 ToolTalk 的类消息字段的值 

TT_SCOPE

定义 ToolTalk 的范围消息字段的值 

TT_OPERATION

定义 ToolTalk 的操作消息字段的值 

TT_FILE

定义 ToolTalk 的文件消息字段的值 

TT_ARGn_MODE

为 ToolTalk 的第 n 个消息参数定义 模式属性的值

TT_ARGn_VTYPE

定义 ToolTalk 的第 n 个消息参数的 vtype 属性的值

TT_ARGn_VALUE

定义第 n 个消息参数的值