第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 结论/摘要
在本章中你已见过一些可帮助你处理日常的工作小程式, 和一些特殊的工具以记录和重新 (建立) 产生萤幕影像. 拥有这些工具你开始得到视窗系统的优点并开始使用它的图形能力.
下一章我们继续以相同的方向看一些普通的公用程式, 看它们如何利用视窗系统去简化操作与增强使用介面.