发信人: youyy.bbs@210.34.48.50 (ooo), 信区: Unix
标 题: X Windows使用指南(3) raner
发信站: FZU_BBS (Wed Dec 9 10:29:04 1998)
转信站: sjtubbs!sjtunews!FZU_BBS
Origin: bbs.fzu.edu.cn
BBS水木清华站∶精华区
寄信人: <bbs@captain.net.tsinghua.edu.cn>
标 题: 3 -- Alex 整理
发信站: 华南理工大学 BBS木棉站
日 期: Tue Aug 20 08:33:26 1996
因而显现或隐藏其他视窗.
注意 : 隐藏不是将它送到堆叠的底部, 或表徵图化. 假如你使用选单 "隐藏"一
个视窗, 当下次你要求再出现时你必须像开启一个新的应用视窗一样地安
置 (position) 它.
┌—————————————————————┐
│ p93. fig 8 - 7 │
│ │
│ │
│ │
│ │
│ 图 8 - 7 xterm 的正常视窗与Tektronix视窗 │
└—————————————————————┘
8.5.1 Tektronix 的特殊功能
Tektronix 选单 (同时按下 CONTROL 与滑鼠中间按钮可得到) 提供你一些类
似 Modes控制 xterm 视窗的功能. 但它仅提供用於 Tektronix 视窗的(功能)项目.
改变字元的大小 : 你可以从四个不同的大小选择, 范围从 Large Characters
(预设值) 到 Small Characters. 你可以在任何时刻改变它, 甚至在一
列中间. 在改变之前已出现在萤幕上的字元不受影响.
清除萤幕 : Tektronix 的一个特性是它的萤幕不卷动. 在萤幕上有两行
(column) (左与右) 为本文, 当其中之一已写满, 输出切换到另一端, 然
而, 已显示的字元不清除 (erased), 因此萤幕不久会变混乱, 除非你下
命令清除它. 想这样做的话需於 Tektronix 选单选择 PAGE : 萤幕会被
清除, 且游标被移至左上角.
重置 "终端机" : 於 Tektronix 选单选择 RESET. 字元的大小与线的型式 (
可能因一个程式输出至视窗而改变) 被设回预设值, 且 PAGE 的萤幕清除
功能会被执行.
拷贝视窗内容至一个档案 : 於 Tektronix 选单选择 COPY, 自从最近一次的
PAGE功能後任何写到萤幕的内容都会被拷贝到名为 COPYyy-mm-dd-hh.mm.ss 的
档案. yy-mm...... 为当时时刻. 该档被建於启动 xterm 时的目录下.
重绘 Tek 视窗会花一些时间 : 当它发生时, Tek 视窗内的游标变成一个闹钟
(见图 8 - 8)
┌——————————————————┐
│ p94. fig 8 - 8 │
│ │
│ │
│ │
│ 图 8 - 8 被用於 xterm 的 Tektronix │
│ 视窗内的闹钟形指标 │
└——————————————————┘
8.6 使用不同字型
xterm 可以让你从正常的文字与粗体文字选择不同的字型, 字型选择必须有固
定的宽度且彼此大小相同. 你目前尚不知道如何找到可以利用的字型, 但它的应用
范围很广, 下面的例子我们将只用两种, 这两种是 core 版本提供字型的一部分:
8x13 (一个字元大小为 8 像素宽, 13 像素高) 与 8x13b (一个粗体变体)
欲指定特殊字型必须使用命令列选项 :
-fn font : 使用 font 的正常字型, 取代预设的 "fixed" 字型.
-fb font : 使用 font 的粗体字型, 取代预设的 "fixed" 字型; 预设状态下
xterm 不区分粗体字的本文.
图 8 - 9 所显示的是执行下列命令
xterm -fn 8x13 -fb 8x13b
明确地指定正常与粗体字型的结果. 我们将在 "使用X的字型与色彩" 一章
中 (第13章) 进一步说明视窗字型与颜色.
┌—————————————————┐
│ p94. fig 8 - 9 │
│ │
│ │
│ │
│ 图 8 - 9 具有粗体与正常字型的 │
│ xterm 视窗 │
└—————————————————┘
8.7 使用色彩 (colour)
假如你有彩色显示器, 你可以用命令列选项设定一组 (些) 视窗元素去指定
色彩:
-fg colour : 以 colour 颜色印出前景, 亦即文字.
-bg colour : 以 colour 颜色作视窗背景.
-bd colour : 以 colour 颜色画视窗边界.
-ms colour : 以 colour 颜色为滑鼠指标颜色.
-cr colour : 以 colour 颜色为游标颜色.
参照连接在网路上的机器对视窗设定的色彩码, 你可以发现非常有用. 设定滑
鼠与游标为显眼的颜色也是有帮助的, 使你在纷杂的视窗中较容易看得到它们.
8.8 其他 xterm 选项
有许多其他的选项可以被 xterm 接受. 有些是设定终端机的特性, 例如 :
-display与 -geometry 前面已经讨论过. 所有的这些都描述於 xterm 指南页
(manpage), 中,但下面是一些有用的杂项 :
-iconic : xterm 应该以表徵图启动的方式取代由正常方式 "开启" 视窗.(当
使用uwm 为你的视窗管理器, 表徵图的初始位置将决定於表徵图被产生
当时的游标位置. 我们将在 "定义应用程式的预设选项 -- Resources"
这章 (第15章) 里教你如何明确地指定一个表徵图位置)
-title string : 使用 string 为视窗标头 (抬头), 这个标头就像图 6 - 8 在
新开启视窗所看到的一样, 且某些视窗管理器可能将它包含在视窗标头棒
(title bar).
-C : 这个视窗应该将接收的输出送到系统控制台 (例如 : 磁碟已满讯息, 装
置错误 (device error), 等) 若你没有一个视窗具有这个选项指定, 控
制台讯息可能直接出现在你的萤幕 (亦即不在一个固定视窗中) 并扰乱
显示; 若发生时, 只要使用 uwm 的选单选择 RefreshScreen 去恢复正常
显示即可.
-e prog [args] : 在视窗中执行具有选择性引数的 prog 程式, 取代启动一
个 shell.(此选项必须在命令列的最後, 所有在它後面的视为 args 的
部分). 你经常需要使用 -e 去 rlogin 到一个不支援X的远方系统, 例
如 :
xterm -title saturn -e rlogin saturn -l root
8.9 设定终端机键盘
X 本身可让你改变键盘对照表, 所以你可以为针对不同的情况改变它以适合一
个国家的使用习惯. 但这个对照表仅决定那个 "字元码" 联结到一个给定的键.
client 程式 (像 xterm 但更进步) 则可指定任意的字串给任何键或键组 (组合
键). 使用这个结构你可以设定一个 xterm 特别适用於邮件程式, 或一个除错器,
你只要指定一般命令给功能键, 或控制字元, 甚至单一字元。这个结构的详细部
分相当的复杂,所以我们将延缓到 "订制你的键盘和滑鼠 -- 转译" 一章(第18
章)中再介绍.
8.10 结论
xterm 是一个具有许多选项与功能的复杂的程式, 幸运地是大多数的时间你不
需要使用它们, 而当你使用时通常是在你开始启动 xterm 时将它设定成你喜欢的
架构. xterm的指南页 (manpage) 是一个很长的程式功能参考文件. 在详读它之前
, 你尽可能在一般的操作时不使用它, 较专门特别的地方才查考它.
注意 : 指南页提到文件 "Xterm Control Sequence " (控制顺序)这文件目前还在
准备中, 并不是发行版本的一部份.
许多介面特性 (功能) 例如 : 卷动棒与如何以指标选择本文等, 是藉由标准软
体 widget (小工具)写在程式里 (在第15章的 toolkit 那节有较多的介绍). 你
将发现许多由其它X应用程式提供的介面都是相同的, 例如: 第10章的 xman 与
xedit. 在继续探讨它们之前我们先在下一章看看一些虽然小但有用的程式.
=====
第9章 方便的程式和视窗相关的工具
到目前为止我们已经涵盖了使用系统的基本元素, 有了 xterm功能, 你开
始从视窗系统获得看得见的优点. 在本章我们描述一些小程式, 开始去充分使
用系统并使你的工作更方便.
这章先提出 "案头附属品" (desk accessory) 的方便程式, 接著介绍捕捉
(capturing)、恢复 (restoring) 与列印萤幕影像的一组工具.
9.1 方便的程式
本节所描述的一些程式功能虽属次要, 但是却可以使你工作得更方便轻松.
有些我们曾经提过 -- xclock 与 xcalc -- 但在这里将更有组织地描述, 我
们将看一些可以显示目前机器负载和告诉你有邮件送达等功能的新程式.
9.1.1 一个类比或数位时钟 - xclock
在第5章中我们用 xclock 为范例程式, 它有下列命令列选项 :
指定视窗初始大小与位置 : 用 -geometry geomspec.
设定背景色 : 用 -bg colour.
设定前景色 : 用 -fg colour.
设定指针的颜色 : 用 -hd colour.
指针边缘高亮度 : 用 -hl colour, 以高亮度 colour 颜色为指针的
边缘.
其他有用的选项 :
使用数位时钟 : -digital, 告诉 xclock 使用一个 24 小时的数字型
时钟, 以取代预设的类比型, 如图 9 - 1.
设定 "时钟-滴答" 频率 : -update num, 使时钟每 num 秒更新显示一
次. 处於指针状态下, 若 num 小於 30 秒则以一个钻石形秒针每
num 秒移动一次, 如图 9 - 2. (预设值为 60 秒)
设定半小时钟声 : -chime, 每半小时整使终端机铃响一次, 每一个小
时整铃响两次.
┌————————————————┐
│ p98. fig 9 - 1 │
│ │
│ │
│ │
│ │
│ 图 9 - 1 数字型时钟 │
└————————————————┘
┌————————————————┐
│ p98. fig 9 - 2 │
│ │
│ │
│ │
│ 图 9 - 2 具有钻石形秒针的指针型│
│ 时钟 │
└————————————————┘
9.1.2 一个桌上型计算器 - xcalc
这是另一个我们曾经用过的程式. 我们用过的命令列选项如下 :
指定视窗初始大小与位置 : -geometry geomspec.
设定背景色 : -bg colour.
设定前景色 : -fg colour.
其他选项 :
指定计算尺 (slide-rule) 模式 : -analog, 执行程式模拟一个计算
尺 (图 9 - 3) 取代电子式计算器. 这实在很稀奇, 但一些更进一
步的指令包含於下面, 因为它不包含在指南页内.
指定 HP-10C 型计算器 : -rpn (代表反波兰记数法 (Reverse Polish
Notation)), 告诉 xcalc 模拟 HP-10C 型计算器 (如图 9 - 4).
各种计算器模式的更深入的指令说明包含於指南页. (无论你处於那一个模式
, 当你将它表徵图化时, 其表徵图都是图 9 - 5 的样子.
┌——————————————————┐
│ p99. fig 9 - 3 │
│ │
│ │
│ │
│ │
│ 图 9 - 3 类比的 xcalc 是一个计算尺 │
└——————————————————┘
┌——————————————————┐
│ p99. fig 9 - 4 │
│ │
│ │
│ │
│ │
│ 图 9 - 4 反波兰记数法 xcalc 计算器 │
└——————————————————┘
┌————————————————┐
│ p99. fig 9 - 5 │
│ │
│ │
│ │
│ │
│ 图 9 - 5 xcalc 表徵图 │
└————————————————┘
使用计算尺
使用滑鼠按钮操作计算尺. 当滑鼠指标进入视窗内, 指标变成手型游标.
定位滑尺 - 左端 : 移动指标进入滑尺区, 定位至你想要的地方,碰
触左按钮,滑尺左端跳至指标位置.
定位滑尺 - 右端 : 与设定左端一样, 但碰触右按钮.
定位计算尺的游标 : 定位指标至你想要的尺体位置, 并碰触左按钮
: 尺的游标跳至指标位置.
滑动滑动棒 (slide-bar) : 定位游标至滑尺, 按下中间按钮, 并保
持按著 ... 拖拽滑尺到你要的位置, 然後放松按钮.
将尺的长度变为两倍 : 在尺体上碰触中间按钮.
将尺的长度变为一半 : 在尺体上碰触右按钮.
注意 : 假如你以左或右按钮拖拽, 将会有奇怪的事情发生.
9.1.3 显示机器的负载平均 - xload
xload 显示系统平均负载 (在执行伫列里的平均工作数目) 的柱状图 ,
它会定期地更新. 典型的输出如图 9 - 6a, xload 的表徵图如 9 - 6b.
┌———————————————————┐
│ p100. fig 9 - 6 │
│ │
│ │
│ │
│ │
│ 图 9 - 6 xload 的正常视窗与表徵图视窗│
└———————————————————┘
9.1.4 邮件通知程式 - xbiff
xbiff 是一个监视你的邮件档与让你知道何时有邮件到达的小程式. 它显
示一个邮箱的图案; 当没有新邮件时邮箱的旗子是向下的 (图 9 - 7a). 当有新
邮件进来时, xbiff 响铃, 竖起旗子, 并使图案变成反相显示 (图 9 - 7b).
你可以在 xbiff 视窗上碰触任何滑鼠按钮, 强迫旗子放下.
xbiff 接受一般对色彩的命令列选项 (-bg, -fg, -bd) 与对视窗特性的
命令列选项(-display, -geometry, -bw). 其他包括 :
指定检查邮件频率 : -update num, 告诉 xbiff 每 num 秒检查邮箱一次
, 看是否有新的邮件到达. (预设值为 60 秒)
指定一个特定邮件档 : -file filename, 使 xbiff 检查在 filename 内
的邮件, 取代预设名称的档. 预设名称为 /usr/spool/mail/username, 其中
username为你的登录名称 (login name)。
xbiff 特有的 -file 选项, 对网路上的邮件被集中处理和你的邮箱由
另外的机器处理等两方面非常有用. 下面的命令让你执行某个邮件机器(比
如说mars) 上的 xbiff程式, 查看你的邮箱, 并将显示送回你自己的机器venus:
rsh mars xbiff -file /var/spool/mail/smith\
-display venus:0 &
┌—————————————————┐
│ p101. fig 9 - 7 │
│ │
│ │
│ │
│ 图 9 - 7 xbiff 邮件监视视窗的两种│
│ 状态 │
└—————————————————┘
9.2 储存, 显示与列印萤幕影像
X是一个图形系统, 而你将用它在视窗内显示文字与图形. 经常X视窗的使
用者会想要捕捉萤幕上的某些影像, 以便稍後你可以重新显示它, 或送至硬拷贝
(hard-copy)装置列印. 下面的小节将描述这些功能.
9.2.1 储存一个视窗的影像 - xwd
xwd 倾印 (dump) 一个视窗的影像到一个档案. 这个档案稍後可以被其他
程式处理 (例如列印一个硬拷贝).
使用 xwd 有许多种不同方法. 你可以明确地指定一个输出档 (使用命令列
选项-out name), 或者使用 xwd 倾印影像到标准输出. 你也可以明确地指定想
倾印的视窗, 或可以让 xwd "提示" 你一下.
让我们拿最简单的一个例子 : 於 xterm 下以下列命令启动程式
xwd > outfile
只要 xwd 启动, 游标便会变成 "十字线" (cross hairs) 状, 见图 9 - 8. 移
动指标进入你想要倾印的视窗, 并碰触任何按钮 : xwd 响一次铃表示它已经开始
记录视窗影像, 且在它完成时响两次铃. 然後游标恢复正常.
┌————————————————┐
│ p102. fig 9 - 8 │
│ │
│ │
│ │
│ │
│ 图 9 - 8 十字线形游标 │
└————————————————┘
注意 1 : 假如你试图倾印在萤幕上不完整的视窗, 程式可能失败并在你的控
制台 xterm 视窗内显示出一长串的错误讯息 (假如你有一个控制台的话).
注意 2 : 被捕捉的影像是你真正在萤幕上的视窗边界内所看到的, 特别的是,
假如视窗的某部分被另一个视窗覆盖, 倾印的影像将展现视窗涵盖的可见部分
以及遮蔽视窗重叠的部分. (例如 : 图 9 - 9 展示一个被 xman 覆盖的一个
xterm 视窗的倾印结果) 这似乎是一个不方便的功能, 但有它的优点 :若想要
获得整个萤幕的倾印影像, 只要对根视窗执行 xwd 即可; 就如同你在萤幕上
看到被覆盖的根视窗一样, 用这个方法你可以得到完整萤幕的图片.
┌—————————————————┐
│ p102. fig 9 - 9 │
│ │
│ │
│ │
│ │
│ 图 9 - 9 一个被重叠视窗的倾印结果│
└—————————————————┘
如何指定被倾印的视窗
有两种方法可以透过命令列选项告诉 xwd 要倾印那一个视窗.
-root : 倾印根视窗. 例如 : 想得到萤幕的一个完整图片, 使用命令 :
xwd -root > screenpic
-id win-id : 倾印视窗识别码为 win-id 的视窗. (每个由 X server 建
立的视窗皆有一个唯一的视窗识别码 : 它只是一个识别视窗的
号码. 我们将在 "资讯与状态程式 " (Information and status
program)那一章 (第12章) 中告诉你如何找到一个指定视窗的
识别码).
(这些选项在 xwd 指南页内没有描述)
使用这些选项的好处是你不必使用滑鼠去指定你感兴趣的视窗. 因为有时
候在倾印的同时,滑鼠必须出现在某个特定的地方执行某项特定的功能,例如:
呼叫一个突现式选单, 或使一个命令按钮出现你想要的状态. 举例来说:欲储存
图 6-1的萤幕影像, 滑鼠必须被使用以突现uwn 选单,因而造成你没有办法同时
使用滑鼠去指定 xwd 的目标. 下面是如何捕捉一个影像的步骤 :
1. 在一个 xterm 视窗, 键入命令
sleep 10.xwd -root > uwmfile
在捕捉影像之前, 给你自己时间使萤幕进入你要的状态.
2. 移动指标至背景视窗上.
3. 按下滑鼠中间按钮, 出现 WindoeOps 选单, 并保持按下不松开 ...
4. ... 等一下, 直到 xwd 响铃一次告诉你开始, 完成则响铃二次. 然後
放松按钮.
相同的方法 (技巧) 被用於捕捉第8章所述之 xterm 选单, 请注意必须
使用明确的视窗识别码. (在 "资讯与状态程式" 那一章 (第12章) 中将再一
次提到)
9.2.2 放大萤幕视窗影像 - Xmag
xmag 容许你快拍 (snapshot) 任何萤幕的影像, 并以任意倍数放大他们. 最
简单的方法为采用交谈方式指定你感兴趣的区域:
1. 启动程式 (用 xmag 命令) : xmag 显示一个闪动的矩形外框.
2. 将矩形框安置到你想要的地方上.
3. 碰触任何按钮 : xmag 快拍矩形框内的区域, 并显示一个清新的视窗
外框, 里面正显示放大的 (enlarged) 快拍影像.
4. 仿照在第6章启动 xclock 後所采用的方法一样使用指标与按钮放置
外框. (例如 : 碰触滑鼠左按钮将视窗安置在指标目前所在的位置)
5. xmag 在你刚安放的视窗内, 重绘放大的影像.
你现在可以选择底下任一动作:
. 你可以按 Q 或 q 或 CTRL-C,接著指定 xmag 视窗内的选项, 跳出 xmag.
. 你可以按滑鼠中间按钮或左按钮以移开目前放大的视窗, xmag 再次显示
出它的闪烁矩形, 所以你可以放大萤幕上另一个区域.
. 按下滑鼠左按钮 : xmag 显示出在指标下的像素座标, 即像素的号码 (它
是一个该像素颜色的内部表示法), 以及像素的 RGB 值, 亦即像素颜色的
红, 绿, 蓝成分. 当你移动指标, 这些显示随著更新, 直到你放松按钮.
程式记录快拍影像只是为了立即再显示 -- 没有任何方法可以取得它以便倾印
影像至一个档案.
xmag 的命令列选项
预设的操作方法被一些方式限制住 -- 你必须以交谈方式指定被放大的区
域, 区域的形状与大小被固定, 放大率都是 5. 但事实上你可以使用命令列选
项改变上述所有的特性 :
指定不同的放大率 : -mag num, 放大影像 num 倍 (num 须为整数). 例
如 : -mag 2, 将产生一个为原来两倍宽与两倍高的影像.
指定大小与放大区域的位置 : 使用 -source geomspec. 例如 :
-source 300x100 + 450 + 762
xmag 不提示任何讯息, 但将直接跳到它显示放大视窗外框的步骤, 假
如 geomspec 只有位置部分, 则大小部分预设为 64x64.
仅指定放大区域的大小 : 使用 -source geomspec, geomspec 仅由大小
部分组成, 就像
-source 300x100
xmag 将显示一个闪烁的 300x100 的矩形外框, 等你定位与碰触按钮.
9.2.3 储存一部分萤幕的影像
xwd 仅对单一, 完整视窗操作. 假如想补捉一个视窗的某部分, 或某些视
窗一起,你必须采用两阶段处理 :
1. 使用 xmag 程式选择你要的区域, 并在一个单一视窗 (亦即 xmag 本
身) 显示它.
2. 用 xwd 倾印 xmag 视窗至一个档案. (假如你想倾印与最初一样大小
的影像, 别忘了指定 -mag 1 给 xmg.)
9.2.4 显示一个先前倾印的影像 - xwud
xwud "反倾印" (undumps)一个先前曾经被倾印至一个档案的影像, 也就是
再次将影像显示於萤幕上.预设的作法是它从标准输入读入倾印档, 所以反倾印
一个你想要档案类似:
xwud < screenpic
xwud 显示闪烁的视窗外框, 准备让你使用视窗管理器. 当你已安置好它
, 影像即被显示. 当然你可以利用视窗管理器移动视窗, 重定大小, 表徵图化
, ...等, 就如同其他任何视窗一般.
注意 : 在指南页内提到的 -inverse 可能无法正常运作。
9.2.5 列印先前倾印的影像 - xpr
xpr 能够转译一个先前曾倾印的影像为可送至硬拷贝印表机列印的格式. 它
支援各种不同的印表机 - PostScript, DEC LN03 与 LA100, 以及 IBM PP3812.
由於预设是写到标准输出, 所以典型的用法应该是 :
xpr -device ln03 < screenpic | lpr
xpr 的命令列选项
xpr 接受数个选项, 包括控制影像在纸上的位置, 大小与配置, 和指定输
出的印表机型式 :
指定印表机型式 : 使用 -device type, 这里的 type 是指 ln03, la100,
ps (PostScript) 或 pp (指 PP3812).
控制影像的大小 : 由於预设 xpr 以最大的尺寸列印影像, 你可以用
-width num 或 -height num 指定最大的宽度或高度, num 的单
位为 inch (不必是整数).
对影像标刻度 : 你可以使用 -scale num 对影像标刻度, num 为整数.
作法与 xmag 的 -mag 选项类似, 但大小可能扭曲, 因为印表机可
能有不同的解析度, 亦即每个 inch 有不同的点 (像素) 数, 例如 :
-scale 2 表示每个萤幕像素被印表机印成 2x2 点的方形, 所以假
如你的萤幕为 75 dpi 且你的印表机为 300 dpi, 列印影像仅为萤
幕影像大小的一半 (75x2/300 = 0.5).
加影像标题 : 使用 -header string 或 -trailer string 分别将一文字
字串印在影像的上面或下面.
利用单一操作命令倾印与列印一个视窗 - xdpr
xdpr 是一个使用 xwd 倾印视窗影像, 接著使用 xpr 格式化列印影像, 最後
使用 lpr 印出影像的一个程式. 它接受所有这三种程式的命令列选项 (事实
上 xdpr是一个 shell描述, 它将上述三种程式包装在一起以便使用。它真正
的工作为检查命令列上的各个选项且传送它们给适当的程式)
9.3 结论/摘要
在本章中你已见过一些可帮助你处理日常的工作小程式, 和一些特殊的工
具以记录和重新 (建立) 产生萤幕影像. 拥有这些工具你开始得到视窗系统的
优点并开始使用它的图形能力.
下一章我们继续以相同的方向看一些普通的公用程式, 看它们如何利用视
窗系统去简化操作与增强使用介面.
=====
第10章 使用X的应用程式
本章将介绍一些包含在 core 版本内的公用程式, 它们的主要功能和视窗
系统并无密切关系, 但使用它们却可提供一个相当不错的使用者介面 :
. Xedit - 一个以视窗为基础的 (window-based) 一般目的文字编辑器.
. Xman - 一个指南页 (manpage) 或系统文件的浏览工具.
. Xmh - 一个 mh 邮件处理程式的视窗前端 (front-end) .
10.1 文字编辑器 - Xedit
Xedit 是一个非常简单而具有视窗介面的文字编辑器. 藉著对 Xedit 所
显示的选择盒碰触按钮, 你可以完成某些操作, 但透过使用键盘你可以执行的
更多, 特别是控制字元. 在这个程式内大多数以键盘为基础的功能由一个标准
软体片段提供 -- 假如你喜欢也可以视为一个建筑区块 "building block" --
叫做一个文字小工具 (text widget). (有关小工具 (Widget) 在 "资源
(Resources)" 那一章 (第15章)中我们将谈得更多). 因为这是一个很普通的
结构, 且你将在其他地方遇到相同的编辑功能, 我们在随後的几节将详细描述
它的功能.
10.1.1 启动与结束程式
假如你想编辑一个名叫 foobar的 档案, 在 xterm 视窗键入命令 :
xedit foobar &
(假如你不想编辑已存在的档案, 只要键入 "xedit &")
xedit 启动与显示它的视窗, 如图 10 - 1 :
┌————————————————┐
│ p108 fig 10 - 1 │
│ │
│ │
│ │
│ │
│ 图 10 - 1 xedit 文字编辑器 │
└————————————————┘
视窗被分成三部分 :
. 上面是命令选单, 具有标著 Quit, Save 等的命令盒.
. 中间部分是讯息视窗, xedit 在里面显示错误讯息与状态, 你也能把它
当作一个抓取区 (scratch area) 来使用, 可在里面键入一段你想剪贴
到其他地方的文字.
. 下面较大的部分是编辑视窗, 它显示你正在编辑或建立的本文.
当你想结束程式时, 在 Quit 盒上碰触左按钮, 假如你做了一些改变但未
储存, 则 xedit会在讯息视窗内印出警告讯息 :
Unsaved changes. Save them, or press Quit again.
10.1.2 插入文字
首先确定指标在编辑视窗内, 然後键入你要的文字 (键盘上任意的列印字
元),在你键入时,被直接地插入. 当你键入时, 你将会注意到新插入的文字是不
断地推送一个在它前面的一个小脱字符 (^) 游标 : 这个游标是插入点
(insertion point) 或简称为点 (point). 任何你键入的或贴入(paste-in)
的文字都将在这个点的位置被插入. 插入点总是位於两个字元间, 而不在一个
字元上面 (就像一个正常终端机游标的状况).
自动 "列卷绕" (Line-Wrapping) -- xedit 的 "段落" (paragraphs)
当你在接近一列的尾端插入文字, 假如你键入的字太长以致无法适合目前
这一列时, xedit 将自动移至下一列. 假如接著剪短该字使得可以适合它原来
的列,它将再跳回上一列.
这个作用与 xedit 的段落定义息息相关 : 一个段落是被新列字元
(newline character)终结的本文. (实际上它意味著连续键入文字而无需插入
新列字元) edit 列卷绕仅作用於一个段落内, 且能正确地处理特殊状况, 例如 :
在移动一个单字 (word)到这列时造成这列必须卷绕到下一列的状况等等.
注意 1 : 这个段落的定义实际上就是被各种其他 Unix 程式视为一列的定
义, 若你使用 xedit 编辑一个正常的档案, xedit会将读入的每一列
视为一个段落处理.
注意 2 : 显示器没有明显的标示出萤幕上的一列在尾端有一个新列字元 (无法
凭肉眼直接辨识) , 亦即xedit 可能视它为一个列尾或一个段落.
注意 3 : 以 xedit 产生的档案, 若用其他程式查看内容时, 可能看到具有非
常长的一列.
译注:这种方式类似於 PC 上的 Wordstar 文书编辑器。
特殊插入操作
下面有一些插入新列的特殊命令, 各种命令稍为有些不同:
插入一个新列, 且插入点移至新列 : 按 RETURN. 便可以插入一个新列, 事
实上就像插入任何列印字元一样. 且假如你不靠 xedit 的列卷绕,
这是移至新列的正常方法.
插入新列, 且对齐 : 按 LINEFEED键插入一新列并移动插入点到下一列,
但任何你键入的列印文字将与上一列的文字对齐. (对键入表格等很有
用).
插入一新列, 但不移动插入点 : 按 ctl-O. 可以插入一个新列, 但点仍
留在同一列. (当你想分开一列并加文字到被分成二列中的第一列尾
端时使用)
10.1.3 剪 (cutting) 与贴 (pasting)
就像在 xterm 中一样的, 你可以选择并 "剪" 出一段文字, 但是有一个
讨厌的差异 : 当选择字或列时, 你必须迅速碰触二次或三次按钮 - 你不能在
按钮按下或松开时暂停.
在插入点的地方贴入文字时, 你可以像以前一样的碰触中间按钮, 或按
meta-Y键.
10.1.4 移动插入点
移动插入点最简单的方法是使用滑鼠 : 移动视窗文字游标 (在图 5 - 2
所看到的垂直棒)到任何你想要的地方, 并碰触滑鼠左按钮. 插入点的 ^ 标志
即跳到新位置.
但通常使用键盘移动插入点也很简单 - 当你正在编辑时, 它会打断你的
节奏, 因为必须拿起滑鼠, 移动它, 最後再次将你的手移回键盘. xedit 提供
一次移动一个字元、单字、列或页的方式移动插入点 :
一次一字元移动插入点
这是移动点的最基本型式 :
向前一个字元 : 按 ctl-f 或 RIGHTARROW
向後一个字元 : 按 ctl-b 或 LEFTARROW
向上一个字元 : 按 ctl-p 或 UPARROW
向下一个字元 : 按 ctl-n 或 DOWNARROW
假如你接近一列的开头, 按几次 ctl-b 後,你将回到前一列. 按几次
ctl-f 後可回复至原位. 假如你是在一页的最上面 (最下面) 一列, 类似的
效果会发生 : 移至前 (或下)一列, 将引起文字卷动使你移至的列能被看得
见.
一次移动一个单字、一列或一个段落
这些是编辑文字时所须的自然移动功能.
向前一个单字 : 按 meta-F 或 meta-f
向後一个单字 : 按 meta-B 或 meta-b
移至列尾 : 按 ctl-E
移到列的开头 : 按 ctl-A
向前一个段落 : 按 meta-]
向後一个段落 : 按 meta-[
你可以看到一个规律开始浮现 : ctl-char 对单一字元操作. 而 meta-char
对单字作相同的事. e.g. ctl-F 向前一个字元, meta-F 向前一个字.
大量移动 - 以页与档案为单位
假如你想获得较大的跳越, 就像在 xterm 里面一样, 你可以使用卷动棒
然而, 卷动文字并不会移动插入点 : 当你键入或清除任何内容时, 文字将
自动地卷回插入点, 让你可以看到你作了甚麽.
如果你想卷动显示内容且移动插入点, 使用 :
往前一页 : 按 ctl-V
往後一页 : 按 meta-V
到档案的开头 : 按 meta->
到档案的尾端 : 按 meta-<
10.1.5 移除不想要的文字 - 删除 (Deleting) 或 杀掉 (Killing)
有两种移除文字的技巧 - 删除只将文字移除, 杀掉则除了移除文字外,
并将文字储存至 "剪缓冲区" (cut buffer), 以便稍後你可以取回. 杀掉命令
仅对较大单位的文字作用 (最小单位为单字) - 因为假如你删除一个字元, 它
就像没有杀掉它一样很容易再打入.
在下面的叙述, "下一个" (next) 意思是正好在插入点之後, "前一个"
(previous) 意思是正好在插入点之前.
删除文字
删除前一个字元 : 按 DELETE 或 BACKSPACE 或 CTL-H.
删除下一个字元 : 按 CTL-D.
删除下一个单字 : 按 meta-d.
删除前一个单字 : 按 meta-h, 或 meta-DELETE 或 meta-BACKSPACE,
不用 SHIFT 键.
注意 : meta-h 与 meta-H 不同.
假如你在一列的开头按下 DELETE 键, 它将删除前一列的尾端的新列字
元, 而将两列合并成一列.
杀掉文字
杀掉下一个单字 : 按 meta-D
杀掉前一个单字 : 按 meta-H 或 shift-meta-DELETE shift-meta-BACKSPACE.
从游标位置杀到列尾 : 按 ctl-K
从游标位置杀到段尾 : 按 meta-k
杀掉目前选定的文字区块 : 按 ctl-W
救回杀掉的文字; 拷贝与移动文字
只要你曾经 kill 某些文字, 你就能按 ctl-Y 救回它, 最近被杀掉的文
字在插入点的地方被插入. 但有几点须注意 :
. 只有最近被杀掉的文字可以被救回 - 你无法将一连串被杀掉的文字取
回.
. 救回的文字是被插入到目前插入点的位置 - 不是该段文字原先被移除
的地方.
. 若是需要的话你可以救回相同的文字许多次, 亦即按 ctrl-Y 并不影响
缓冲区之内容.
基於"杀掉"动作的原理, 你可以用它来移动或拷贝文字区域.
移动文字 : 先 kill 它, 再将点移动到你想重新放置的地方, 最後
un-kill.
拷贝文字 : 先 kill 它并 un-kill 它, 使拷贝的来源不变; 再将
点移动到你想拷贝的地方, 最後 un-kill.
10.1.6 取消改变 (Undoing Changes)
假如你作了某些改变 - 杀掉或删除或键入或贴入文字 - 但稍後发现并不
是想要的, 你可以复旧 (undo) 它. 在 undo 盒里碰触左键 : 取消最近的改变
undo本身也是一个改变, 所以假如你再次碰触 undo, 它将取消前一个 undo
的作用; 你可以永远地像这样一直切换下去.
undo 仅对最近的改变有作用. 假如你想更往回追溯, 你可以利用 more 盒
连续地 undo 更前面的改变.
10.1.7 使用档案
前面曾提到在启动程式时你可以指定欲编辑的档案,事实上当程式执行时
, 你也能抓取档案. 为达到这个目的你将会使用介於 load 与 undo间的文字
盒,我们称为"档名盒".
储存文字到一个档案 : 在 save 盒上碰触左按钮; xedit 会将编辑视窗内
的文字存到档名为档名盒内档名的档案; 若没有名称, xedit会在讯息
窗内发出
save : no filename specified -- noting saved
因此在你再次在 save 上碰触左按钮之前你必须将指标移到档名盒并
键入档名. 当它已经储存好档案 xedit 会发出确认讯息.
编辑一个不同档案 : 在档名盒键入档名, 并在 load 上碰触左按钮. 若
它无法取用档案, xedit 会发出错误讯息.
插入一个档案到目前的本文 : 按下 meta-I : xedit 突现一个小视窗
(图 10 - 2). 在上端的文字盒, 键入你想插入的档名, 并在 DoIt
上碰触左按钮. 该档案的内容即插入目前的插入点位置.
┌——————————————————┐
│ p113 fig 10 - 2 │
│ │
│ │
│ │
│ │
│ 图 10 - 2 xedit 的插入档案选择视窗 │
└——————————————————┘
注 : 当你在档名盒内键入文字时, 且文字盒在 "插入档案" (INSERT FILE)视
窗, 你可以使用我们曾经描述过的所有键盘基础命令. 事实上, 你不仅能打字
, 也可以剪贴它们.
注意 : 当你键入档名时, 不须用 RETURN 结尾 - xedit 会将 RETURN 视为档
名的一部分, 而造成混淆.
10.1.8 搜寻指定的文字字串
假如你想找出一个指定字串在你编辑本文中出现的地方 :
1. 在我们称为搜寻字串盒 (searchstring box)的里面, 键入字串於
Search >> 的右方.
2. 在 Search >> 上碰触左按钮 : 插入点便会移至本文中下一个出现该
字串的地方.
搜寻是由插入点开始,并且 xedit 预设的搜寻方向是向前, 而不往後搜寻. 假如
你要从插入点往回搜寻, 你可以在 << 上碰触左按钮.
注意 : 当搜寻字串盒内没有文字时, 假如你在 Search >> 或 << 上碰触按钮,
xedit 会将最近在你机器上被任何应用程式所选择的文字区块的片段拷
贝到盒内, 并搜寻它. 假如你不预期会如此, 你可能会感到非常惊讶.
10.1.9 取代一个字串为另一个
假如你想将出现许多次的一个字串 (旧) 置换成为另一个字串 (新) :
1. 先搜寻出本文中第一次出现欲取代字串的地方, 如前一小节所诉述.
2. 在 all 盒右方的取代字串盒内键入新字串.
3. 在 replace 上碰触左按钮 : 旧字串即被取代成新字串, 且插入点移
到下一个出现旧字串的地方.
4. 假如你也要取代它, 再次在 replace 上碰触, 否则 ...
5. ... 假如你不想取代这个, 但想改变它後面的, 在 search >> 上碰触
按钮直到你要改变的地方, 即可以再次取代它.
在你往回移动档案时你无法执行取代, 换言之你无法用简单的方法取代在
插入点之前的字串.
注意 : 假如你目前不在旧字串出现的位置而你试图取代, xedit 会发出下列
讯息 :
ReplaceOne : nothing replaced
但是 replace 本身会完成一个搜寻, 所以你可以继续在 replace 上
碰触按钮, 再次执行代换.
取代每个出现的字串
假如你想将出现的每个旧字串取代成新字串, 在 all 上碰触按钮.
注意 : 使用 all 时所有出现的旧字串均会被取代, 不只是从点往前而已, 而
是整个档案.
10.1.10 杂项功能
重绘本文显示 : 使用时机例如当视窗内变得混杂扭曲, 按 ctrl-L
向前卷动一列 : 按 ctrl-Z
往回卷动一列 : 按 meta-Z
跳至指定的行数 : 在讯息视窗内, 键入你要跳往的行数, 用滑鼠选择你
正在打的本文, 并在 jump 上碰触左按钮, 插入点便会跳至指定列
的开头. (假如在萤幕上有应用程式的文字片段含有你要指定的列数
数字, 你可以利用它 - 而不必依赖 xedit 编辑讯息视窗)
到此我们已经完成对 xedit 的描述, 下一节将转移到另一个应用程式,
我们将会看到类似的使用者操作介面.
10.2 读取指南页 (Manual Pages) - xman
xman 让你浏览系统上的 Unix 指南页, 从一系列选单中选出你要的项目.
欲启动程式时,在一个 xterm 视窗中键入命令 "xman &" : xman 启动并
显示它的主功能选择项视窗, 如图 10 - 3. 下面的小节将详细描述这些选择项.
┌—————————————————┐
│ p115 fig 10 - 3 │
│ │
│ │
│ │
│ │
│ 图 10 - 3 xman 的主选择项视窗 │
└—————————————————┘
10.2.1 xman 本身的线上求助 (on-line help) 功能
xman 有它自己的内建求助选择项. 欲使用它, 在选择视窗内的 help 上
碰触按钮.xman 产生一个 "Xman Help" 视窗, 如图 10 - 4. 你可以使用卷
动棒与滑鼠卷动求助本文. 在求助本文视窗内操作方式如下:
向前移动本文 : 按 f, 或碰触左按钮, 即向前移动一页.
往回移动本文 : 按 b, 或碰触右按钮, 即往回移动一页.
┌—————————————————┐
│ p116 fig 10 - 4 │
│ │
│ │
│ │
│ │
│ 图 10 - 4 xman 求助视窗 │
└—————————————————┘
注意 : 按 b, 或碰触右按钮, 可能无法正确地往回移动一页.
求助视窗内的其他选择项
移动指标到求助视窗上端的边缘时. 图 10 - 5 的选单突现出来. 其中可
使用的选项有 :
Remove Help (移开求助) : 移开这个求助视窗, 但保持其他 xman 视窗
的原样. (在我们的情况是仍得到主选择视窗)
Open New Manpage (开启新指南页) : 与主选择视窗的 Manual Page 盒
相同, 描述於後.
Quit : 结束整个程式 (停止).
欲选择某一选项须移动指标到该选单区并碰触左按钮; 假如你甚麽都不想选
, 只要将指标移出选单即可.
┌——————————————————┐
│ p117 fig 10 - 5 │
│ │
│ │
│ │
│ │
│ 图 10 - 5 xman 求助与指南页视窗选单│
└——————————————————┘
注意 : 在任何时刻, 只要指标进入顶端边缘区, xman 就会突现它的选单. 假如
你不是为了这个目的而意外地横过边缘, 这可能会造成困扰.
10.2.2 如何阅读一个指南页
在主选择视窗的 Manual Page 碰触按钮 : xman 产生一个指南页视窗,
视窗开始时会显示与前面求助视窗相同的文字.
由此出发, 依照下列三步骤阅读指南页 :
1. 选择你要看的指南页的特定章节 (section). (section 是参考 unix
指南页的标准分法. 亦即, section no. 1 包含使用者命令,
section no. 2 包含系统呼叫)
2. 视窗会显示你所选择章节的目录, 从目录中选择进入点.
3. 阅读显示的指南页.
选择指南书 (Manual) 的章节
当 man启动时, 它预先设定为选择指南书的 section 1. 假如这是你所要
的, 你可以省略下列步骤的程序. 否则需指定一个 section :
1. 在指南页视窗内, 移动指标到顶端边缘. 我们将得到一个与在指南页
里相同的突现选单,不过现在所有的选项都可使用.
2. 在 Change Section 项目上碰触按钮 : 选单被一系列的指南书章节名
称的列表取代. (如图 10 - 6)
┌—————————————————┐
│ p117 fig 10 - 6 │
│ │
│ │
│ │
│ │
│ 图 10 - 6 xman 的指南书章节选单 │
└—————————————————┘
3. 在你要的章节上碰触按钮 : xman 在指南页视窗内显示进入点的目录
(如图 10 - 7).
┌—————————————————┐
│ p118 fig 10 - 7 │
│ │
│ │
│ │
│ │
│ 图 10 - 7 xman 的指南页进入点目录│
└—————————————————┘
显示目录和选择指南页
假如你依照上面的描述明白地指定一个指南页章节, xman便会显示一个
指南页目录.否则, 从顶端边缘突现出选单, 并在 Display Directory 上碰触
按钮, 你会得到像上面一样的指南页目录.
从目录中选择一个指南页 : 只要在你要的名称上碰触按钮, xman 即在视
窗内显示指南页 (图 10 - 8). (假如目录列表太长以致视窗无法一次
显示, 它旁边会有卷动棒. 假如你要的名称看不到, 则必须先将它卷动
出现後才可以选择你要的名称)
┌———————————————————┐
│ p119 fig 10 - 8 │
│ │
│ │
│ │
│ │
│ 图 10 - 8 显示一个指南页的 xman 视窗 │
└———————————————————┘
察看一个指南页
只要指南页在视窗内, 你有许多选择 :
卷动指南页本文 : 卷动指南页本文就像卷动求助本文一样, 亦即,
按 f, 或碰触左按钮, 即可向前移动, 按 b, 或碰触右按钮, 则可
往回移动.
本文/目录间之切换 : 在指南页视窗碰触中间按钮, 本文即被切换成目
录列表. (在目录内碰触按钮, 则回到上一个指南页本文显示).
搜寻一个指定的指南页 :
1. 从顶端边缘突现出选单并选择 Search. xman 突现出一个搜寻视窗
(图 10 - 9).
2. 在顶端的本文盒内, 键入你想要的指南页名称 (不用任何 section
接尾词, 例如你只要键入 diff, 不用键入 diff(1) 或 diff.1)
3. 在 Manual Page 上碰触按钮,xman 便会显示你所要的指南页. (假
如它找不到, 它会在指南页的视窗顶端边印出一个讯息)
注意 : 你键入的名称必须完全 (di 不能代表 diff), 名称的大小写也必须配
合 (xaddhost 不等於 XAddHost).
┌—————————————————┐
│ p120 fig 10 - 9 │
│ │
│ │
│ │
│ │
│ 图 10 - 9 xman 搜寻视窗 │
└—————————————————┘
许多项目一起显示
在任何时刻, 你都可以视需要开启额外的 xman 视窗, 只需从顶端边缘突
现出选单并选择 Open New Manpage 开启一个指南页视窗, 然後选择 Help 开
启一个求助视窗.
只要你喜欢你可以开启许多不同的 xman 视窗, 且对视窗管理器来说每一
个都可以被独立地管理, 例如 : 你可以将某些重定大小, 其它的表徵图化等等.
为了清楚起见, 主选择视窗、求助视窗及指南页视窗的表徵图均不同 (图 10 - 10
a, b, c). (表徵图内的 "U.P.M." 代表 "Unix Programmer's Manual")
┌—————————————————┐
│ p120 fig 10 - 10 │
│ │
│ │
│ │
│ │
│ 图 10 - 10 xman 的三个不同表徵图 │
└—————————————————┘
在任何一个 xman 视窗, 选择 Show Both Screen, 你可以同时显示目录
及指南页,视窗分成上下两部分, 上面显示目录, 下面显示指南页 (图 10 - 11)
(当你如此做时, 顶端的边缘变薄 : Display Directory 与 Display
Manual Page 选择项变成灰色 -- 表示它们目前不可选用, 且选单项目
Show Both Screen 变成 Show One Screen).
┌——————————————————————┐
│ p121 fig 10 - 11 │
│ │
│ │
│ │
│ │
│ 图 10 - 11 同时显示目录与指南页的 xman 视窗│
└——————————————————————┘
如有需要, 你可以改变视窗中两个分框 (panes) 的相对大小, 注意接近分
隔框线的右手边有一个小的黑方形叫做把手 (柄) (grip)
1. 将指标指向把手.
2. 按下任一滑鼠按钮, 并保持按著.
3. .. 拖拽分隔线至你要的地方.
4. 放开按钮,两个方框即被适当地重划.
注意 : 我们会在不同的X应用看到许多这种把手, 但大部份的情况均无法让你
拉动它以重调与相邻视窗的比例. 例如 : 假如你试图拉 xman 顶端
边缘与本文或目录视窗分隔线上的把手, 它不会有任何反应.
10.3 邮件/讯息处理系统 - xmh
xmh 是一个架在 mh 邮件/讯息处理系统之上的X介面. 当你启动它时, xmh
会建立一个像图 10 - 12 的视窗. 程式的视窗相关画面如编辑本文, 与管理视
窗方框,均与 xedit 及 xman十分类似, 事实上是由相同的内部结构所提供的.
正因为如此, 且由於大多数描述是与程式的邮件功能有关而较少与X有关, 我
们不进一步讨论. 假如你想知道如何使用程式, 指南页拥有一个简单但内容丰
富的描述.
┌—————————————————┐
│ p123 fig 10 - 12 │
│ │
│ │
│ │
│ │
│ 图 10 - 12 xmh 邮件处理视窗 │
└—————————————————┘
10.4 结论/摘要
在本章中你已经开始看到某些X应用程式在使用者介面上一致性的面貌,
例如:卷动棒的操作, 和一般的本文编辑功能. 这里只归结出包含在 core
发行版本中的一般使用者程式,下一章探讨一些示范程式, 然後我们便进入本
书第三部分,探讨如何订制一个系统.
但是在许多方面你现在所需的是去获得系统的真正优点. 你目前要的是更
多的应用程式,使你在 X的工作架构下做更广泛的应用, 这就是 MIT 发行版
contrib 部分重要的地方. 它包含了所有阶层的广泛应用程式, 从详细的程式
函数到方便的程式, 一直到完整的应用, 像事先看排版文件的 xdvi 或绘图程
式 xfig.
制造商与第三集团支持X的程式及套装软体数量不断地增加, 这些软体不
是具有一个完整的X使用者介面, 就是至少可使你输出图形到一个X视窗. 当
然也有其他的软体来源,举例而言, 自由软体基金提供高度弹性与扩展性的
GNU Emacs编辑器, 它曾经被整合到X里面, (事实上, 许多 Xedit 订定编辑
的功能键的确与 Emacs 相同) 如何得到 GNU Emacs 的细节包含在附录E "如何
获得X" 中.
=====
第11章 示范与游戏程式
MIT 发行的 core 版本提供了少数的示范程式以及仅有的一个游戏程式.
它们展现出某些视窗系统的威力, 且能给人一种强烈的美好印象 -- 特别是在
彩色萤幕上.
11.1 找出通过随机迷宫的路径 - maze
maze 在视窗中产生一个随机的迷宫 (图 11 - 1), 它会自动找出从入口
通过迷宫到达出口的路径. 它会追踪它走过的轨迹, 当它从一个死巷中退出时
则将轨迹消除. 你可以用滑鼠按钮启动, 暂停, 继续或停止程式, 就如同在手
册页中所描述的. maze不提供颜色.
注意 : 中间按钮对暂停与重新启动的作用并不可靠.
┌————————————————┐
│ p125. fig 11 - 1 │
│ │
│ │
│ │
│ │
│ 图 11 - 1 迷宫程式 │
└————————————————┘
11.2 担任指标的大眼睛 - xeyes
xeyes 在视窗中绘出两个大眼睛, 且它们永远保持看著指标 (图 11 - 2).
当指标移动时眼睛也随著调整 (且若你移动指标到它自己的眼睛之间, 它们会
变成斗鸡眼! (cross eyed!)
你可以明确地给视窗的每个元素设定颜色 - 瞳孔, 背景, 外框等.
注意 : xeyes 会使你的系统执行速度变慢.
┌————————————————┐
│ p126. fig 11 - 2 │
│ │
│ │
│ │
│ │
│ 图 11 - 2 xeyes 程式 │
└————————————————┘
11.3 智慧盘游戏 - puzzle
puzzle 是一种古老的游戏, 有 15 个编号的小方块被一个 4x4 框架围住.
你必须移动小方块使它们按照数字顺序排列. (图 11 - 3)
┌————————————————┐
│ p127. fig 11 - 3 │
│ │
│ │
│ │
│ │
│ 图 11 - 3 智慧盘游戏 │
└————————————————┘
你可以使用滑鼠控制游戏 :
启动游戏 : 藉著在控制棒的左上边盒子内碰触按钮可以重新搅和小方块.
移动小方块 : 将指标移到与空白位置相同的行或列的小方块上,碰触按
钮以移动该小方块与所有它之前的所有小方块进入空的位置. (所以
移动後, 空位置在你碰触按钮的地方)
由 puzzle 自己去解 : 在控制棒的右手边盒子上碰触按钮.
离开 (跳出) : 在控制棒的中间碰触中间按钮.
11.3.1 puzzle 的命令列选项
使用一个大小不是 4x4 的框架 : 使用选项 - size width x height,
其中尺寸是以小方块为单位.
改变小方块被移动的速率 : 使用选项 -speed num. 此处 num 是每秒移动
的数目 (预设值为 5).
11.4 列印一个大X语标 - xlogo
xlogo 建立一个视窗并在它里面显示一个X语标(logo),如图 11 - 4. 假
如你重定视窗大小,语标再次被绘出, 且尽可能地将视窗填满.
┌————————————————┐
│ p127. fig 11 - 4 │
│ │
│ │
│ │
│ │
│ 图 11 - 4 xlogo 程式 │
└————————————————┘
11.5 跳动的多面体 - ico
ico 产生一个视窗且在它里面有一个 12 面体 - 一个具有 12 面的实心
体 - 如图11 - 5 所示. 这个多面体是会动的, 它在视窗内不断地碰撞跳跃.
在单色显示器上你可能只有一个直线构成的图 (使用选项 -i 可以反白显示),
但是在彩色显示萤幕上, 你可以看到实心的彩色面.
试下面的例子 :
ico -nodeges -faces -colors red blue yellow green
你可以设定一个跳跃的12面体在一个根视窗内 (背景视窗),而不必靠它自
己使用 -r 选项指定特定视窗. 另外, ico 可指定多面体的面数, 不是只有12
面体 : 如果你想得到一个完整的列表可以键入下列命令 :
ico -objhelp
┌————————————————┐
│ p128. fig 11 - 5 │
│ │
│ │
│ │
│ │
│ 图 11 - 5 ico 程式 │
└————————————————┘
11.6 动态几何图样 - muncher 与 plaid
muncher 与 plaid 重覆地绘出变化多端而有趣的几何图样 (图 11 - 6a
与 b).
┌————————————————┐
│ p129. fig 11 - 6 │
│ │
│ │
│ │
│ │
│ 图 11 - 6 muncher 与 plaid 程式│
└————————————————┘
11.7 结论
core版本中没有非常广泛的示范程式. 假如你曾读取 contrib 的磁带, 你
可能会发现下列有趣的程式 :
paint : 简单的绘图程式. (像一个画图程式, 但你可以对区域涂上纹理
或颜色, 不只是线.)
xcolors : 一个可展示你的系统上所有颜色名称的好程式.
xfish : 设定鱼在你的整个背景视窗内游动. 有趣的部分是你可以用滑鼠
射击它们.
qix : 一个 qix 射击游戏的程式.
xmille : 和你玩一个 Mille Bournes 的牌戏.
xsol : 和你玩一个单人玩的牌戏.
xtrek : 一个令人著迷的太空游戏.
=====
第参部 定制系统
第12章 资讯与状态程式
在本章,我们将讨论一些提供视窗系统本身资讯和目前状态的程式。
这包括了检查系统上视窗各种性质 (property) 的工具,和一个观察X
事件结构是如何工作的程式。
这些程式有下列用途:
.当你使用系统时,这些工具程式所提供有关系统内部组织和操作的资讯,
可以帮助你了解发生了什麽事。
.当你要做某种处理时,可以藉著所给的资讯来确认系统的组件。(例如
你必须知道一个视窗的window-id,才可以用xwd 来倾印它。)
.你将经常把从这些工具获得的资讯,当成定制系统工具程式的输入(稍
後几章会讨论)。
12.1 列出你的Xserver的特徵 -- xdpyinfo
xdpyinfo列出有关你的Xserver和server所控制萤幕之各种项目的资讯,
一个典型的输出见图12-1(一个server在Sun 3/50单色工作站上执行的结果)。
┌———————————————————┐
│ p134 fig 12.1 │
│ │
│ 图12-1 典型的xdpyinfo工具程式的输出 │
└———————————————————┘
12.2 获取有关视窗的资讯
有三个程式可以提供目前在你显示器上视窗的资讯。它们是从不同的角度
看系统:
1. 列印视窗的阶层 -- xlswins
2. 对单一视窗详细的资讯 -- xwininfo
3. 列出视窗的性质 -- xprop
12.2.1 列印视窗的阶层 -- xlswins
在第一部曾经提过,所有在系统上的视窗被安排成树状的阶层,根视窗
(也叫背景(background)视窗)在最上层,在其下才是应用视窗,每一个应用
视窗可以拥有它自己的子视窗阶层。
xlswins 列印出这个树状结构,从根视窗或所指定的视窗起至其下所有的
树状结构,对每一个视窗,xlswins 列出视窗的window-id 并用括弧括住它的
名称(如果有的话),子视窗则在下面的几行依序以缩入(indent)两格的方式
列出。下面的图对xman应用程式列出三个不同子树的输出,藉以展示xlswins
如何剖析系统的结构。
图12-2a 是xman主选单的树。你可以看到在应用视窗(0X600011)中含有另一
个视窗(0X600012),而(0X600012)又包含了四个视窗,不需要知道原始程式,
你也可以猜得到是一种视窗包含著视窗,而对子视窗做某种管理的情况。
图12-2b 是xman手册页(manpage) 视窗的树。比上一个例子复杂一些,而且
也无法在确定是否在这一页手册页中总共就只有这麽多视窗和子视窗。所以 ...
图12-2c 这是xlswins 更详细的输出,比上一个例子需要在命令列中多加
一个 -l 的选项,多出来的讯息为巢状的深度(第几层树)、相对於父视窗的
几何座标和大小、和视窗左上角距离根视窗的座标(也就是萤幕上的绝对座标)
,有了这些视窗的座标,你就能了解它们在萤幕上的位置,如果你还是搞不太
清楚,可以执行xwd ,指定xlswins 所输出的window-id ,在本图,我们发觉
视窗(0X60005d)是高而窄的,所以可能是一个卷动棒。我们可以试著用命令:
xwd -id 0x60005d | xwud
结果的确 xman 卷动棒的图形出现了,这个命令我们在9.2.1 节有提过(只不
过这一次我们不把输出送到档案,而利用导管 (pipe) 的技巧直接当成另一程
式的输入。)你可以用这种方法分析任何视窗。
┌——————————————————┐
│ p136 fig 12.2 │
│ │
│ 图12-2 三个xlswins 的输出 │
└——————————————————┘
注意:并非所有的视窗都可列印出资讯,如果你碰到这种无资讯可供列印视窗
,你将获得类似下面的讯息:
x Protocol error: BadMatch, invalid parameter
attributes
Major opcode of failed request: 73 (X_GetImage)
为了篇幅的关系,我们只列出了完整xlswins 输出的三个小部份。如果在
你自己已经有好几个应用程式的系统上,你将可以看到uwm 和xterm 选单所相
关的子树,或者是与 xmh和 xedit 的命令按钮相关的子树。
12.2.2 关於单一视窗的详细资讯 -- xwininfo
xwininfo能够针对特定的视窗给你大量的资讯,你可以藉著命令列的选项
告诉xwininfo你要哪一部份的资讯。图12-3包含完整的列印输出(用选项-all)
┌——————————————————┐
│ p138 fig 12.3 │
│ │
│ 图12-3 典型的xwininfo输出 │
└——————————————————┘
你可以用和xwd 相同的方法来指定你感兴趣的视窗:
.交谈式(预设):开始时,xwininfo给你一个十字线游标,你可以将
它移到你所需的视窗再碰触滑鼠按钮。
.使用命令列选项:你可以用选项-root 指定根视窗,或用选项-id
window-id 指定其它的视窗。
你所看到的资讯可分为以下几类:
视窗的window-id :window-id 是视窗系统识别每一个视窗的参考,就如
同先前所看到的,几个程式(包含xwininfo它本身)给你一个数字代
表window-id 。例如你要倾印一个视窗,你可以先执行xwininfo得到
--
BBS水木清华站∶精华区
--
※发信站 [福州大学庭芳苑BBS bbs.fzu.edu.cn] · FROM [210.34.72.2]
--
※ 修改:.fzx 于 Aug 1 12:23:33 修改本文.[FROM: heart.hit.edu.cn]
※ 转寄:.紫 丁 香 bbs.hit.edu.cn.[FROM: chen.hit.edu.cn]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: jmm.bbs@bbs.hit.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:819.178毫秒