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

第 12 章 手动创建操作

创建操作有两种方法:

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

必须手动创建操作的理由

共有三种基本操作类型:

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

有关详细信息,请参见创建操作的限制

COMMAND 操作

command 操作执行命令启动应用程序或公用程序、运行 shell 脚本命令或执行操作系统命令。 操作的定义包括要执行的命令 (EXEC_STRING)。

“创建操作”工具能用于创建最通用类型的命令操作。不过在有些情况下必须手动创建操作。例如,如果操作中有以下指定就必须手动创建 COMMAND 操作:

MAP 操作

映射操作是不直接指定命令或 ToolTalk 消息,而是“映射 ”到另一个操作的操作

映射可以指定操作的替代名称。例如,名为 IconEditor 的内置命令操作启动“图标编辑器”。数据库还包括对位图和像素图文件的定义中 (通过 ARG_TYPE 字段) 限定的 Open 操作,它映射到 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_TYPENO_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

由于操作文件的图标表示一个操作,因此有时也被称为操作图标。如果其潜在的操作启动应用程序,则操作文件图标也被称为应用程序图标

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

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

    创建与操作同名的可执行文件。该文件的内容并不重要。

例如,操作的定义如下:

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

此时,操作文件是名为 MyFavoriteApp 的可执行文件。在“文件管理器”和“应用程序管理器”中,MyFavoriteApp 文件将使用图标图像 Mfapp.size.type。双击 MyFavoriteApp 的图标就运行该操作的执行字符串,图标的“针对项”帮助则为 DESCRIPTION 字段 (“运行 MyFavoriteApp”) 的内容。

“操作标号”

如果操作定义包含 LABEL 字段,该操作文件就在“文件管理器”和“应用程序管理器”中加上该字段内容的标号而不是文件名 (action_name)。例如,如果操作定义中包含下面的定义:

ACTION   MyFavoriteApp
 {
   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 

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

  5. 在 Desktop_Tools 应用程序组中双击“重新装入操作”。

操作定义中的优先级

当用户调用操作时,系统在数据库中查找匹配的操作名。如果存在多个由该名称的操作,系统则利用优先级规则来决定使用哪个操作。

生成 COMMAND 操作的执行字符串

COMMAND 操作至少需要两个字段—ACTIONEXEC_STRING

ACTION action_name
 {
    EXEC_STRINGexecution_string
 }

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

执行字符串的一般特性

执行字符串可能包括:

“操作变量”

变量是命令或应用程序正确运行所需要的信息。例如,考虑可用于在“文本编辑器”中打开文件的命令:

dtpadfilename

在该命令中,filenamedtpad 命令的文件变量。

象应用程序和命令一样,操作也可以有变量。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 操作

操作有三种处理多文件变量的方法:

为不可互换变量创建操作

采用下面的语法惯例之一:

用“可交换的文件变量”来创建操作

采用下面的语法惯例之一:

实例

创建接受多重拉放文件的操作

要接受多重拉放文件变量并以下面的形式执行命令行:

command file 1 file 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)"远程终端在:"%
    TERM_OPTS         -title% (String)"窗口标题:"%
    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 -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—可写

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

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

数据库主机—包含操作定义的系统

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

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

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

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

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

使用操作定义中的 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) 手册页。

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

使用 EXEC_STRING 操作中的 dtaction

例如,下面的操作使用名为 “Spell” 的内置操作 (该操作在“应用程序管理器”中标记为“检查拼写”)。 新的操作运行“文本编辑器”和“拼写”操作,并在单独的终端仿真器窗口内显示拼写错误。

ACTION EditAndSpell
 {  	
 	WINDOW_TYPE				NO_STDIO  	
 	EXEC_STRING				/bin/sh -c 'dtaction Spell \
        %Arg_1"文件:"%; 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			字符串
    

    “应用程序管理器”和“文件管理器”利用此标记字符串来标识操作的图标。

  4. 在操作定义中本地化任意下面的字段:

    • 对于本地化图标:ICON

    • 对于本地化“针对项”帮助:DESCRIPTION

    • 对于本地化的提示符:在 EXEC_STRING 中任何带引号的文本

创建 ToolTalk 应用程序的操作


注意:

下面的信息只适用于支持 ToolTalk 消息的应用程序。


使用操作类型 TT_MSG 创建一个发送 ToolTalk 消息的操作。

ACTION action_name
{  	
  TYPE		TT_MSG
  … 	
}

addressing and disposition Fields

不支持的消息

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 个消息变量的值