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

第 17 章 管理应用程序资源、字体和颜色

通过使用"式样管理器"或者通过定制附加字体和颜色资源,可为显示器选择广泛的颜色和字体范围。本章讨论如何定制字体和颜色资源。

本章还描述如何指定 DtEditor 小部件应用程序,例如桌面文本编辑器 (dtpad) 和邮件程序 (dtmail) 的式样转换以及与这些转换冲突的 DtEditor 小部件应用程序菜单加速器的替换物。

设置应用程序资源

资源被应用程序用以设置外观和性能的某种特征。例如,"式样管理器"(dtstyle)提供这样的资源,它使您可以指定系统在何处寻找包含颜色调色板信息的文件:

 dtstyle*paletteDirectories: /usr/dt/palettes/C  HomeDirectory/.dt/palettes

桌面应用程序的 App-default 文件位于 /usr/dt/app-defaults/language 目录。

设置系统范围的资源

    向文件 /etc/dt/config/language /sys.resources 添加资源。 (可能必需创建文件。)

例如,如果在 /etc/dt/config/C/sys.resources 中指定:

 AnApplication*resource: value

则在下次登录时,资源 AnApplication*resource 将被设置在每个用户的 RESOURCE_MANAGER 特性中。


注意:

有关"式样管理器"资源的详细信息,请参见 dtstyle 手册页。有关"邮件程序"资源的详细信息,请参见 dtmail 手册页。


设置个人资源

  1. 将资源文件添加到文件 HomeDirectory/.Xdefaults

  2. 双击 Desktop_Tools 应用程序组中的"重新装入资源"。

桌面如何装入资源

资源在"会话管理器"启动会话时装入。有关"会话管理器"如何将资源装入 RESOURCE_MANAGER 的信息,请参见,"装入会话资源"

进程管理器资源

下面的进程管理器资源可用:

定义 UNIX 绑定

缺省时 UNIX 绑定不可用。

指定 EMACS 式样转换

下面的过程指定了:

  1. 在文件 HomeDirectory /.Xdefaults 中添加下行:

    #include"/usr/dt/app-defaults/language/UNIXbindings"

    其中 languageLANG 环境变量的值。

  2. 重新启动会话。

修改 EMACS-Style 转换

  1. 将文件 /usr/dt/app-defaults/language /UNIXbindings 的内容插入 HomeDirectory/.Xdefaults

  2. .Xdefaults 文件中编辑绑定。

  3. 完成后重新启动会话。

由 UNIXbindings 文件提供的 UNIXbindings 绑定

/usr/dt/app-defaults/language /UNIXbindings 文件提供的绑定如下表所述。


注意:

当 UNIX 绑定启用时,"Delete"键删除前一个字符,而 "Shift-Delete"键删除下一个字符。


表 17-1 列出和 UNIX 绑定冲突的菜单加速器和加速器文本的 dtpad 覆盖。

表 17-1 dtpad 覆盖

菜单加速器和加速器文本 

覆盖 

Dtpad*fileMenu.print.acceleratorText:

 

Dtpad*fileMenu.print.accelerator:

 

Dtpad*editMenu.undo.acceleratorText:

Ctrl+_  

Dtpad*editMenu.undo.accelerator:

Ctrl<Key>_  

Dtpad*editMenu.paste.acceleratorText:

Shift+Insert 

Dtpad*editMenu.paste.accelerator:

Shift<Key>osfInsert 

Dtpad*editMenu.findChange.acceleratorText:

Ctrl+S 

Dtpad*editMenu.findChange.accelerator:

Ctrl<Key>s 

表 17-2 列出和 UNIX 绑定冲突的菜单加速器和加速器文本的 dtmail 创作窗口的覆盖。

表 17-2 dtmail 创作窗口覆盖

菜单加速器和加速器文本 

覆盖 

Dtmail*ComposeDialog*menubar*Edit.Undo.acceleratorText:

Ctrl+_ 

Dtmail*ComposeDialog*menubar*Edit.Undo.accelerator:

Ctrl<Key>_  

Dtmail*ComposeDialog*menubar*Edit.Paste.acceleratorText:

Shift+Insert 

Dtmail*ComposeDialog*menubar*Edit.Paste.accelerator:

Shift<Key>osfInsert 

Dtmail*ComposeDialog*menubar*Edit.Find/Change.acceleratorText:

Ctrl+S 

Dtmail*ComposeDialog*menubar*Edit.Find/Change.accelerator:

Ctrl<Key>s 

下面的转换提供 (GNU 式样) EMACS 控制和元键绑定以及一些附加绑定。在适当的时候,它们也允许"Shift"键和正常绑定进行组合使用,以便反转操作的方向。例如,"Ctrl+Shift+F" 键将使光标后移一个字符,而正常情况下,"Ctrl+F" 键 使光标前移一个字符。

附加绑定是:

Ctrl+comma-后移一个单词

Ctrl+Shift+comma-前移一个单词

Ctrl+period-前移一个单词

Ctrl+Shift+period-后移一个单词

Ctrl+Return-文件结尾

Ctrl+Shift+Return-文件开头

GNU EMACS 将 delete-previous-character(),而不是 delete-next-character() 绑定到"Delete"键。正常情况下,"Meta+F"是文件菜单的助记符,所以将忽略 forward-word() 的绑定。使用 forward-word 的其它一种绑定 (例如,Ctrl+period)。

表 17-3 列出 DtEditor.text 转换

表 17-3 DtEditor.text 转换

修饰符键  

键  

操作例程  

c ~s 

<Key>a: 

行开头()\n\ 

c s 

<Key>a: 

行结尾()\n\ 

c ~s 

<Key>b: 

向后一个字符()\n\ 

c s 

<Key>b: 

向前一个字符()\n\ 

c ~s 

<Key>b: 

向后一个字符()\n\ 

c s 

<Key>b: 

向后一词()\n\ 

m ~s 

<Key>b: 

向后一词()\n\ 

m s 

<Key>b: 

向前一词()\n\ 

c ~s 

<Key>d: 

删除下一个字符()\n\ 

c s 

<Key>d: 

删除前一字符()\n\ 

m ~s 

<Key>d: 

kill (删除) 下一个词()\n\ 

m s 

<Key>d: 

kill (删除) 前一个词()\n\ 

c ~s 

<Key>e: 

行结尾()\n\ 

c s 

<Key>e: 

行开头()\n\ 

c ~s 

<Key>f: 

向前一个字符()\n\ 

c s 

<Key>f: 

向后一个字符()\n\ 

m ~s 

<Key>f: 

向前一词()\n\ 

m s 

<Key>f: 

向后一词()\n\ 

<Key>j: 

新行并缩进()\n\ 

c ~s 

<Key>k: 

kill (删) 到行结尾()\n\ 

c s 

<Key>k: 

kill (删) 到行开头()\n\ 

<Key>l: 

重画显示()\n\ 

<Key>m: 

新行()\n\ 

c s 

<Key>n: 

进程继续()\n\ 

c ~s 

<Key>n: 

进程关闭()\n\ 

<Key>o: 

新行并备份()\n\ 

c ~s 

<Key>p: 

进程继续()\n\ 

c s 

<Key>p: 

进程关闭()\n\ 

c ~s 

<Key>u: 

kill (删) 到行开头()\n\ 

c s 

<Key>u: 

kill (删) 到行结尾()\n\ 

c ~s 

<Key>v: 

下一页()\n\ 

c s 

<Key>v: 

前一页()\n\ 

m ~s 

<Key>v: 

前一页()\n\ 

m s 

<Key>v: 

下一页()\n\ 

<Key>w: 

kill (删除) 选择部分()\n\ 

c ~s 

<Key>y: 

unkill (不删除) ()\n\ 

<Key>]: 

向前一段()\n\ 

<Key>[: 

向后一段()\n\ 

c ~s 

<Key>comma: 

向后一词()\n\ 

c s 

<Key>comma: 

向前一词()\n\ 

<Key>\\<: 

文件开头()\n\ 

c ~s 

<Key>period: 

向前一词()\n\ 

c s 

<Key>period: 

向后一词()\n\ 

<Key>\\>: 

文件结尾()\n\ 

c ~s 

<Key>Return: 

文件结尾()\n\ 

c s 

<Key>Return: 

文件开头()\n\ 

~c ~s ~m ~a 

<Key>osfDelete: 

删除前一字符()\n\ 

~c s ~m ~a 

<Key>osfDelete: 

删除下一字符() 

管理字体

使用"式样管理器字体"对话框,可以选择为所有应用程序所要的字体组和字体大小。也可以在命令行中指定字体,或使用资源来:

字体是一种文本字符被打印和显示的类型式样。桌面包含各种不同式样和大小的字体。

位图字体是由点的矩阵组成。(缺省情况下,"式样管理器"只配置位图字体。) 字体完全包含在一个文件中。要有一整套不同的大小、倾斜度和磅值,需要很多文件。

字体被指定为资源的值和命令的参数。"X 逻辑字体描述" (XLFD) 名称是请求所需字体的方法。系统查找到与它所给的描述最匹配的字体。

设置桌面字体资源

"式样管理器字体"对话框使您可为类似文本输入和标签这样的事物选择字体 (多达七种大小)。也可使您添加或删除字体组。

由字体对话框设置的资源

选中字体后,下面的资源写到 RESOURCE_MANAGER 特性中:

字体对话框所使用的资源

用于字体对话框中每个选择的字体在 /usr/dt/app-defaults/Dtstyle 资源文件中指定。最多可指定七种大小。

NumFonts-字体对话框中字体大小的数字。

SystemFont[1-7]-最多七种资源,将特定字体指定给某一"字体"对话框选择,以作为系统字体

UserFont[1-7]-最多七种资源,将特定字体指定给某一"字体"对话框选择,以作为用户字体


注意:

已选择了这些资源的缺省字体,以便满足在各种显示器上的可读性。如果要在应用程序中使用特定字体,请使用应用程序字体资源设置字体,而不要更改这些桌面字体。


有关应用程序字体的详细信息,请参见 DtStdAppFontNames(5) 和 DtStdInterfaceFontNames(5) 手册页。

列出可用的字体

  1. 键入下面的命令:

    xlsfonts [-options] [-fn pattern]

    显示了系统中可用的 XLFD 名称和字体别名的列表。位图字体在全部 14 个 XLFD 字段中的显示值。可缩放字样在 PixelSize, PointSize, ResolutionXResolutionY 位置显示 0。

  2. 要检查特定字体,请使用 xlsfonts 的模式匹配能力。在不打算匹配的模式部分使用通配符来代替。

  3. 如果 xlsfonts 未显示任何以 dt 开头的字体名,则字体路径未包含桌面字体。键入下面的命令,将桌面字体包含到可用字体中:

    xset +fp 目录名
    

    其中目录名是包含桌面字体的目录。会话启动所设置的缺省位置为 /usr/dt/config/xfonts/language.

    有关附加信息:

    • xset 和 xlsfonts 手册页列出可用的选项。

    • 使用 X Window 系统解释字体别名和 xset 客户。

在命令行上指定字体

    使用 -xrm 命令行选项来指定特定客户的字体资源。例如:

 application name -xrm "*bitstream-charter-medium-r-normal-8-88-75-75-p-45-iso8859-1"

X 逻辑字体描述 (XLFD)

通过列出 14 个不同的字符来指定字体,每个字符间用破折号 (-) 隔开。这称作 X 逻辑字体描述 (XLFD)。在某些情况下,列表中的特性可由一个 *通配符代替, 并且,特性中的一个字符可由一个 ? 通配符代替。表 17-4 列出字体特性字符串说明。

特性字符串说明的形式是:

"-Foundry-FamilyName-WeightName- Slant-SetwidthName-AddStyleName- PixelSize- PointSize-ResolutionX-ResolutionY-Spacing- AverageWidth-CharSetRegistry- CharSetCoding"

表 17-4 字体特性字符串说明

特性字符串 

定义 

Foundry

标识字体设计者的字符串 

FamilyName

标识字体的注册商标名称的字符串 

WeightName

给出字体的相对磅值 (例如粗体) 的字符串 

Slant

描述倾斜方向的代码: 

R (Roman-无倾斜)  

I (斜体-向右倾斜)  

O (倾斜-向右倾斜)  

RI (反转斜体-向左倾斜)  

RO (反转倾斜-向左倾斜)  

SetwidthName

描述宽度 (例如压缩或扩展) 的字符串 

AddStyleName

提供唯一标识字体所需要的任何附加信息的字符串 

PixelSize

以像素为单位,给出 em-square 大小的整数 

PointSize

以小数点为单位,给出 em-square 大小的整数 

ResolutionX

以像素为单位,给出水平分辨率的整数 

ResolutionY

以像素为单位,给出垂直分辨率的整数 

Spacing

指定单元间的间隔的代码: 

M (等间隔--固定间距)  

P (比例间隔--变化间距)  

C (字符单元)  

AverageWidth

以 1/10 个像素为单位,给出平均宽度的整数 

CharSetRegistry

标识已注册了字体编码的注册授权的字符串 

CharSetEncoding

在指定注册中标识字符集的字符串 

实例

下面的 XLFD 名称描述了名为 charter 的字体,它是由支持 ISO8859-1 标准编码的 Bitstream 生成的:

 -bitstream-charter-medium-r-normal--8-80-75-75-p-45-iso8859-1

它具有中等磅值,没有特殊倾斜,并且为正常宽度。字体是成比例的,具有 8 个像素或 8个点的 em-square 框。水平和垂直分辨率都是 75 个像素。字符的平均宽度为 45 个 1/10 像素或 4.5 个像素。

此字符串的一部分可由通配符代替。系统使用找到的第一个与您指定的部分相匹配的字体。

如果您需要的只是 8 像素的 charter 字体,可使用:

 *-charter-*-*-*-*-8-* 

查看选定的字体组属性

通过从"式样管理器字体"对话框中选择"属性"按钮,可以查看下面的字体组的属性:

用户的字体组文件系统存储

当用户添加字体组时,它被存储在下面的位置:

HomeDirectory/.dt/sdtfonts/host/locale/typeface-nnnnnn

host 是本地工作站的主机名

locale 是用户的当前语言环境,像 "C"或 "ja"。

typeface-nnnnnn 是由选中的字体和唯一生成的数字派生的名称

此字体组目录包含下面的三个文件

文件 fonts.aliasfonts.dir 是标准的 X11 字体文件,适于添加到 X 服务器的字体路径。sdtfonts.group 文件包含用户指定的字体组名称。

系统管理员字体组创建

这样其他的用户可以访问工作站上的字体组,系统管理员可将字体组复制到 /etc/dt/sdtfonts/locale 目录或复制到 /usr/openwin/lib/X11/stdfonts/locale 目录。"会话管理器"首先在 HomeDirectory/.dt/stdfonts/host/locale 中查找,接着在 /etc/dt/sdtfonts/locale 中查找,最后是在 /usr/openwin/lib/X11/stdfonts/locale 中查找。

管理颜色

本节描述:

颜色调色板

调色板由一组颜色集组成。当前调色板的颜色集显示在"式样管理器颜色"对话框中

每个调色板都有一个相对应的文件。paletteDirectories 资源 指定了包含调色板文件的目录。缺省情况下,此资源包含:

颜色集

在"式样管理器"的"颜色"对话框中,当前调色板中的每个颜色集由一个颜色按钮代表。每种颜色由一个颜色集 ID-从 1 到 8 的数字,来标识。

图形 17-1 HIGH_COLOR 的颜色集 ID 值

Graphic

每个颜色集最多由五种颜色组成。每个颜色按钮显示颜色集的背景颜色。每个颜色集中的五种颜色代表下面的显示组件资源:

前景-应用程序窗口或窗框的前景。它总是黑色或白色。这一般是用于窗口和标题内的文本。

背景-应用程序或窗框的背景。

topShadowColor-应用程序控制 (如按钮) 和窗框架的顶部和左 bevel (斜面) 的颜色。

bottomShadowColor-应用程序控制和窗框架的底部和右 bevel (斜面) 的颜色。

selectColor-指示某些控制活动的活跃状态的颜色,象活动的切换和按钮。

每个调色板所使用的颜色集的数目取决于 colorUse 资源,用户可以使用"式样管理器要用颜色数目"对话框来设置其数目。

指定颜色值

在向其调色板文件写入颜色信息时,"式样管理器"使用 RGB 值。RGB 数的语法为:

# RedGreenBlue

RedGreenBlue 是十六进制数,每个 1 到 4 位长,这表示所使用的颜色的数目。每个颜色必须具有相同的位数。这样,有效的颜色值由 3、6、9 或 12 个十六 进制位组成。

例如,白色可用下面的任一方式来指定:

#fff
#ffffff
#fffffffff
#fffffffffffff

如果直接设置颜色资源,可使用颜色名称或 RGB 值。文件 /usr/lib/X11/rgb.txt 列出了全部已命名的颜色。

颜色集如何映射到资源

桌面通过资源将颜色集映射到各种显示单元,并作出如表 17-5所示的指定。

表 17-5 将颜色集映射到资源的

资源 

显示单元 

activeColorSetId

活动窗框颜色

inactiveColorSetId

非活动窗框颜色

textColorSetId

文本输入区

primaryColorSetId

应用程序的主背景区

secondaryColorSetId

应用程序的菜单条、菜单和对话框 

这些资源将颜色集 ID 作为它们的值。当使用"式样管理器"选定新的调色板时,带有颜色集 IDs 的彩色显示单元允许单元动态地更改为新的颜色方案。

可将这些资源用于单个应用程序。例如,下行显示如何通过使用颜色集 8 作为窗口的主颜色,将所有的 dtterm 窗口可视地分组。

 dtterm*primaryColorSetId:   8

缺省颜色集赋值

用于显示单元的颜色集 IDs 取决于在"式样管理器"中颜色设置的数目:

表 17-6 显示高保真彩色 (8 个颜色集) 的颜色集 IDs-"式样管理器"设置为"桌面使用更多颜色"。

表 17-6 高保真彩色

颜色集 ID 

显示单元 

活动窗框颜色 

非活动窗框颜色 

未用 (缺省情况下)  

文本输入区 

应用程序的主背景区 

应用程序的菜单条、菜单和对话框 

缺省情况下未用 

"前面板"背景 

表 17-7 显示中某彩色 (4 个颜色集) 的颜色集 IDs-"式样管理器"设置为"应用程序使用更多颜色"。

表 17-7 中等彩色

颜色集 ID 

显示单元 

活动窗框颜色 

非活动窗框颜色 

"应用程序"和"前面板"背景颜色 

文本输入区 

表 17-8 显示低彩色 (2 个颜色集) 的颜色 IDs-"式样管理器"设置为"应用程序使用大多数颜色"。

表 17-8 低彩色

颜色集 ID 

显示单元 

活动窗框,工作区选择按钮 

所有其他显示单元  

用式样管理器控制颜色

可以通过"式样管理器"动态地更改桌面应用程序和其他合作应用程序的颜色。由"式样管理器"设置的前景和背景颜色可用于非合作应用程序。

对于这些客户程序而言,要响应"式样管理器"的颜色更改,客户机程序必须在使用桌面 Motif 库。用其他工具包写入的客户机程序无法动态地更改颜色来响应"式样管理器"的更改。 对于客户机程序的颜色更改只有在重新启动客户机程序后才生效。

必须不存在其它特别的颜色资源适用于客户程序。这包括指定用户的资源、appdefaults (应用缺省) 和在应用程序中内置的资源。

客户机程序可指定 primaryColorSetIdsecondaryColorSetId 资源在桌面调色板中使用某些颜色。

式样管理器所用的颜色数目

"式样管理器"所使用的颜色数取决于下面的资源的值:

colorUse-配置桌面所使用的颜色数

shadowPixmaps-指示桌面用像素图来替换这两种阴影颜色

foregroundColor-指定前景颜色是否动态地更改

dynamicColor-当切换调色板时控制应用程序是否更改颜色

表 17-9 列出由桌面分配的最大颜色数。

表 17-9 桌面颜色的数目

显示 

最大颜色数 

数字采自 

B_W 

黑色和白色 

LOW_COLOR 

12 

两个颜色集乘以五种颜色,再加上黑色和白色 

MEDIUM_COLOR 

22  

四个颜色集乘以五种颜色,再加上黑色和白色 

HIGH_COLOR 

42 

八个颜色集乘以五种颜色,再加上黑色和白色 

要决定最大颜色数:

  1. 将调色板中颜色集的数目与每个颜色集中的颜色数相乘。

  2. 加上 2 (用于黑色和白色)。

    但是,在下面的配置情况下,在调色板中将只有十种颜色:四个颜色集乘以每个集中的两种颜色 (backgroundselectColor),再加上黑色和白色:

     *colorUse:	MEDIUM_COLOR *shadowPixmaps: 	True *foregroundColor:	White

    注意:

    多重颜色图标使用 14 种附加颜色。


colorUse 资源

colorUse 资源的缺省值是 MEDIUM_COLOR。此资源的值影响在调色板中使用的颜色集的数目。其他资源影响用于制造阴影的颜色数。colorUse 资源的值也影响多重颜色图标的使用。

值 

描述 

B_W 

"黑色和白色""式样管理器"将"显示"用 1 到 3 个颜色平面设置颜色集的数目:2 最大颜色数: 2 缺省颜色数:2 无多重颜色图标 

LOW_COLOR 

"应用程序使用大多数颜色""式样管理器"将"显示"用 4 到 5 个颜色平面设置颜色集的数目:2 最大颜色数:12 缺省颜色数:12 无多重颜色图标 

MEDIUM_COLOR 

"应用程序使用更多颜色""式样管理器"将"显示"用 6 个颜色平面设置颜色集的数目:4 最大颜色数:22 缺省颜色数:22 多重颜色图标 

HIGH_COLOR 

"桌面使用更多颜色""式样管理器"将"显示"用 7 个或更多个颜色平面设置颜色集的数目:8 最大颜色数:42 缺省颜色数:42 多重颜色图标 

缺省 

桌面为显示选择正确的值。 (为减少桌面用于高保真彩色的颜色数,缺省的 colorUse 资源设置为 MEDIUM_COLOR。)

shadowPixmaps 资源

shadowPixmaps 资源指示桌面用像素图来代替两个阴影颜色。这些像素图将黑色或白色与背景颜色相混合,以便模拟顶部或底部阴影值。这将需要的颜色数减少了两个,因为不需要为阴影颜色分配颜色单元。

值 

描述 

真 

桌面创建 topShadowPixmapbottomShadowPixmap 来代替阴影颜色使用。

假 

从调色板使用 topShadowColorbottomShadowColor

shadowPixmaps 的缺省值取决于您的 colorUse 资源和显示器的硬件支持。

foregroundColor 资源

foregroundColor 资源指定在调色板中前景是如何配置的。

设置 

结果 

白色 

前景设置为白色。 

黑色 

前景设置为黑色。 

动态 (缺省)  

前景被动态地设置为黑色或白色,取决于 background 的值。例如,白色字母在黄色背景上很难阅读,所以系统选择黑色。

如果 foregroundColor 被设置为黑色或白色,则颜色集中的颜色数将减少一个,并且前景将不随背景颜色的更改而更改。

foregroundColor 的缺省值是动态的,但在 colorUse 的值为 B_W 的地方例外。

dynamicColor 资源

dynamicColor 资源控制应用程序是否动态地更改颜色;就是说,当切换调色板时,客户机程序是否更改颜色。

值 

描述 

真 

当选中新的调色板时,客户机程序动态地更改颜色。 这是缺省值。 

假 

客户机程序不动态地更改颜色。当选中了新的调色板时, 客户机程序将在会话重新启动时,使用新的颜色。 

dynamicColor 资源的值为"真"时,不能动态地更改颜色的客户程序 (non-Motif 应用程序) 与能动态地更改颜色的客户程序在颜色颜色影射图中分配不同的单元,即使您看到相同的颜色。


注意:

由于所有的客户机程序可以共享相同的颜色单元,将 dynamicColor 设置为"假"将减少桌面消耗的颜色数。


设置应用程序窗口的阴影厚度

桌面定义在应用程序窗口中的组件的缺省阴影厚度为一个像素,这些组件包括按钮阴影和焦点高亮显示。Motif 1.2 应用程序使用此资源值;其他应用程序可能未获得此资源值,因而在显示上将有所不同。

将 non-Motif 1.2 应用程序的阴影厚度设置为一个像素:

  1. 以超级用户登录。

  2. 创建 /etc/dt/config/language /sys.resources 文件。

  3. /etc/dt/config/language/sys.resources 中指定应用程序专用的资源如下:

     application_class_name *XmCascadeButton*shadowThickness:  1

    有关为所有桌面用户覆盖系统缺省资源和指定附加资源的详细信息,请参见"装入会话资源"