第15章 定义应用程式的预设选项 -- Resources
大多数的X程式接受命令列选项,以便让你指定前景和背景的颜色、字型
、起始位置等等。这种需求是有必要的,因为如果你在程式内硬性规定使用某
种字型,而在执行此程式的机器上并没有这种字型,则将使得程式无法执行,
所以你不应硬性规定某些叁数。
当你每次执行程式时不太可能在命令列中指定所有需要的选项,因为有太多种
可能的组合了,所以X提供了一个叫做resources 的一般性结构,用来传递预
设的设定给应用程式。当你阅读指南页时,你可能已经注意到要你叁照resources
,但却不知道什麽是resources ,我们将在此解释。
你在系统中几 所有的定制动作都将运用到resources ,事实上你为一
个应用程式所选择的每一个选项的设定都要用到resources ,从简单的项目例
如色彩或字型,到定制你的键盘或管理你的显示器如何工作,它非常的方便,
而且在系统中到处都用得到。
本章我们描述什麽是resources ,及关於它们是如何发展的资讯,接下来
我们描述X Toolkit(工具),它完全地使用到了resources 的结构;然後
告诉你一些resources 工作的细节,你该如何设定它们,及你能用它们设定哪些
型态。
这是相当长的一章,有几个新的观念被加进来,一开始会有些困难,但不
需太担心,原则上resources 结构非常地简单,只是第一眼看起来好像有许多
"魔术符号" 而已,也许你应该先很快地浏览一遍,然後再详细地重读一遍。
15.1 什麽是resources ?
在X的文献中,”resources ”有两种意义。第一种是相当低阶的,意指
被server管理或建立而被应用程式使用的东西。视窗、游标、字型等均属於这
种意义。
另一种意义也就是通常你在指南页中常看到”resources ”的意义:它是
一种传递预设设定、叁数和其它值给应用程式的方法。在本章中我们局限於
讨论此种意义之resources 。在解释现行系统如何工作前,先回顾一下X的早
期版本是如何掌握这些功能的,因为现行的结构由此产生。
15.1.1 ”预设”的背景
在X较早的版本,对於像视窗背景颜色、视窗边界的颜色、应用程式所使
用的字型这类项目你可以轻易地设定其预设值。
预设值的设定方式很直接,你只需指定一个视窗的属性和它的预设值。例如:
.Border : red
意即所有的视窗均为红色的边(除非你在命令列中重新设定边的颜色),你也
可以把程式的名称放在属性之前,则只有被指名的程式才会改变,所以把以下
这个规格
xclock.Border:blue
和先前的规格结合在一起的意义为:预设所有视窗均为红色的边,只有xclock
的视窗为蓝色的边。
每当你设定预设值,程式会自动取用该值,所以你 需每次均指定你的选
择,它让你依照适合你的工作习惯来使用字型,不论是你要用较小的字型以获
得更多的资讯显示,或是用较大的字型以便阅读,它让你为特定的应用程式选
择颜色,你可以定义应用程式的起始位置,所以你可以自行设计一些启始萤
幕的布置,因为许多的预设值(字型、色彩等)实际上精确的意义为”resources”
,所以”resources ”的意义逐渐扩增为”预设值设定(default setting) ”
或”设定预设选项(setting default options) ”。
15.1.2 Resources 传递资讯到应用程式
随着X的发展,应用程式也随之扩增,需要有一个设施传递大量的资讯到应
用程式以定制或指定它们的行为,而不再只是有关色彩和字型的资讯而已,
例如你可以告诉 xbiff检查信件的频率,或定义 xterm的功能键(function-key)
12为 入某一特定的字串,或在 xedit中连续碰触两次滑鼠中按钮代表选择目
前这段本文等等。
所以逐渐地,resource及预设设施已遂一被发展出来,直到目前对於传递
任何资讯到一个应用程式已是一个一般性的结构。你可以像文字串一样地指定
资讯,应用程式会在内部解释它:例如把这字串当作一个滑鼠按钮的名称,或一种颜
色,或由应用程式所发出的一个功能和 "resources"是如何指定的。
这个结构也逐渐地复杂起来以便让你能正确地指定在何处应用预设值。在
以前,你只能指定所有的程式或某一个特定的程式。现在的系统你可以设定的
预设值如:”终端机视窗的选单选项”或”在所有视窗的标签”或甚至”除了
xterm以外的所有编辑器视窗按钮盒中的功能按钮”。
X Toolkit, 使得resources在使用上有很大的包容性并且增进了应用的
精确度。你需要先了解 Toolkit是什麽,才能适当地使用resource 结构,我
们将在下一节讨论。
15.2 X Toolkit
[1] [2] 下一页
我们先前曾提过,X并不决定使用者介面,它只是提供一些结构,让应用
程式设计者能组合成任何形式的介面。理论上这是非常合 需求的 -- 它使得
系统拥有一个一般性目的的工具且没有使用上的限制,但从另外的角度来看,
它有很大的缺点:
.对一个使用者而言,不同的应用程式有不同的介面,不只是难学难记,
且应用程式无法平顺地 (smoothly) 相互协调工作(例如无法在视窗之间
做剪贴),你得到的是一群个别的、独立的程式,而不是一个一致的、
合作无间的系统。
.从程式设计师的立场,意味着基本视窗系统上的每一件事均需从头做起,
选单、卷动棒、时钟、功能钮等等都必须一一生产。甚至在单一的产品,
不同的程式师做了一点稍有不同的事,便会导致许多不相容的情况。
为了克服上述的问题,Toolkit(工具)的方式应运而生。
在某些范围,Toolkit 会决定使用者介面的形式,但是无论如何,它会尽
量减少这种影响,并让使用者介面发展者有更多选择的可能性,Toolkit 被分
为两个部份:
1. 一组基本的结构和函数用以建构使用者介面的元素,被称为Toolkit
Intrinsics(内部的工具)。不论是什麽样的介面,任何工具均需使
用到它,所以我们可以把Toolkit Intrinsics视为”固定的”,也就
是无可替代的。
2. 一组提供特定的使用者介面(或介面的形式)的元素,这些元素被称
为 widgets (小工具),而Toolkit 的第二部份称为 widget set (小
工具组),我们认为这是可以替换的,不同的介面提供不同的Widget
Sets ,甚至它们都使用Intrinsics。
下面两个小节更详细地说明这两个部份。
15.2.1 Toolkit 的第一个部份 -- Intrinsics
Intrinsics定义的实体称为widgets,并提供了所有建立、管理和毁坏widget
所需的设施。理论上,一个widget是一个处理特定动作的使用者介面的元素,实际
上一个widget是X视窗加上规则和功能以决定它的输入和输出的动作,也就是
说,它如何对使用者有所反应。
为了帮助解释widget的观念,我们将给一点范例,但是请注意!它们并不
是Intrinsics的一部份,而是我们将於下一小节讨论的一个特定的widget组的
一部份,在此提出目的只是为了方便。
Command Widget(命令widget):这是一个在萤幕上含有一些文字的长方
形”按钮”(也就是一个小视窗)。当指标在这个按钮之上时,它的边会呈现
高亮度,当一个滑鼠按钮在这个widget被碰触时,一个被程式师指定的软体常
式(routine) 便会被执行。
你已经使用过command widget好几次了:在xedit 的命令选单和在xman的
主选项视窗。
Scrollbar Widget(卷动棒widget):同样的,你也已经使用过了好几次,
在xterm 和xedit 中卷动本文,在xman中卷动本文和目录列。
Intrinsic 提供了基本的结构,任何一个提供介面的较高阶软体均需要使
用到它,它提供了以下的功能:
.建立和毁坏widget。
.把一群widget当成一个单元(unit)来管理。
.掌握geometry,也就是说位置,包括从最高阶(也就是应用程式的 -geometry
选项)到最低阶(管理应用程式用到的sub-widget的位置(例如选单按钮
的位置))。
.掌握”事件”,例如在一个widget中, 当滑鼠按钮被碰触时呼叫适当的程
序、管理视窗的曝光 (eXPosure)和掌握键盘的输入。
.管理给resources 和预设的每一个widget。
15.2.2 Toolkit 的第二部份 -- Widget Sets
广义来说,Intrinsics只提供你建造一个使用者介面的骨架,Widget Set则
实际地提供了一个既定的介面,且不同的widget组提供不同形式的介面,虽然
对任何范围的需求并无法预防混用widget,但一般仍希 一个系统固定在
一致性的widget set上。
在X core 版上只有一个widget set提供,我们描述於下:
Athena Widget Set (雅典娜widget set)
大部份的M99v core版的应用程式使用Toolkit 和Athena Widget S
(出处:http://www.sheup.com)
上一页 [1] [2]
选项)到最低阶(管理应用程式用到的sub-widget的位置(例如选单按钮
的位置))。
.掌握”事件”,例如在一个widget中, 当滑鼠按钮被碰触时呼叫适当的程
序、管理视窗的曝光 (eXPosure)和掌握键盘的输入。
.管理给resources 和预设的每一个widget。
15.2.2 Toolkit 的第二部份 -- Widget Sets
广义来说,Intrinsics只提供你建造一个使用者介面的骨架,Widget Set则
实际地提供了一个既定的介面,且不同的widget组提供不同形式的介面,虽然
对任何范围的需求并无法预防混用widget,但一般仍希 一个系统固定在
一致性的widget set上。
在X core 版上只有一个widget set提供,我们描述於下:
Athena Widget Set (雅典娜widget set)
大部份的M99v core版的应用程式使用Toolkit 和Athena Widget S
(出处:http://www.sheup.com)
上一页 [1] [2] [3]