BBS水木清华站∶精华区

 
                 第8章 终端机模拟器 - 细说 xterm 
 
 
    xterm 是终端机模拟器 - 它是一个可以使X应用程式视窗看起来像普通 
终端机一样的程式, 而无需知道有关视窗系统的功能. 我们已经使用过 xterm 
的一小部分, 在本章中将更深入地探讨它所提供的特殊额外功能. 并且说明许 
多X程式共通的一些应用程式介面的面貌. 
 
    xterm 模拟一个 "哑终端机 (dumb terminal)", 但它也提供许多一般终 
端机没有的功能 : 
 
    . 设定终端机模式与特性的突现式 (pop-up) 选单 
 
    . 可以上下移动萤幕影像的卷动棒 (scrollbar) - 当文字列因萤幕卷动 
   而消失时, 可以将它拉回. 
 
    . 模拟 Tektronix 4014 终端机. 
 
    . 可选择性地记录萤幕列到一个使用记录档 (log file). 
 
    . "剪"(cut)"贴"(paste)文字区块. 
 
    . 可选择文字颜色, 视窗背景等... 
 
    . 可选择 VT100 与 Tek 视窗字型. 
 
    . 可设定( 程式化(programmable))键盘. 
 
    我们首先描述选择功能的选单结构, 接著描述如何使用选择功能. 
 
 
 
8.1 选择 xterm 功能 - 选单与命令列选项 
 
    xterm 有它自己的内建选单结构, 可在使用期间改变设定. 有三个选单可 
供利用, 见图 8 - 1 : 
 
               ┌————————————————┐ 
               │    p84. fig 8 - 1              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 1 xterm 的三个选单      │ 
               └————————————————┘ 
 
  xterm X11 : 这里的大多数选择项目为程式控制功能, 例如 : continue pro- 
              gram (程式继续) 或 kill program (杀掉程式). 欲突现此选单, 
              必需同时按住 CONTROL 键与滑鼠左按钮. 
 
  modes     : 设定大多数终端机的特性与选择 Tektronix 模拟功能. 欲突现此 
              选单, 须同时按住 CONTROL 键与滑鼠中间按钮 (当处於VT102 视 
              窗时). 
 
  Tektronix : 控制 Tektronix 视窗的外表. 当处於 Tektronix 视窗时, 须同时 
              按住CONTROL 键与滑鼠中间按钮即可突现此选单. 
 
    选单的操作类似 uwm, 藉著按滑鼠按钮可突现选单, 不放松按钮移动指标至想 
选的项目上; 放松按钮後即选定该项. 然而, 有一点不同的地方是, 不能被选择的 
选单项目 (因为此时选择将无意义) 是以较淡的型式显示. 例如: 因为尚未开启一 
个 Tektronix 视窗, 所以Hide VT Window 项目的颜色较淡. 
 
    许多选单的功能也能以启动 xterm 的命令列选项来设定.(事实上有某些功能仅 
能以命令列选项的型式去选择). 下面几节我们将告诉你可以设定不同功能的选单选 
择与命令列选项的选择方式. 
 
 
 
8.2 卷动 xterm 的萤幕 
 
    突现 xterm X11 选单并选择 Scrollbar 项目, 如图 8 - 2. 高亮度的部分告诉 
你两件事: 
 
  1. 萤幕上的列数与储存在卷动棒缓冲区 (scrollbar's buffer) 的列数之比率. 
 
  2. 缓冲区的哪个部份目前显示在萤幕上. 
 
    例如在图 8 - 2 中 : 约有 20 列在萤幕上; 高亮度部分约为总列数的 5 分之 1, 
所以缓冲区包含有约 100 列, 且目前显示的部分是缓冲区的最底部 (因为高亮度区 
在卷动区的最底部). 
 
               ┌—————————————————┐ 
               │    p85. fig 8 - 2                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │ 图 8 - 2 具有卷动棒的 xterm 视窗 │ 
               └—————————————————┘ 
 
    你可以利用滑鼠按钮移动卷动区的高亮度部分, 以改变显示在萤幕上的文字. 
下面的小节将会解释; 为简化说明我们假设卷动缓冲区包含 100 列文字. 
 
注意 : xterm 采用异於其他视窗系统的卷动棒用法, 特别是 Apple Macintosh. 
 
 
 
  8.2.1 移动卷动棒到指定点 
 
    假如你想移动本文到某一指定位置, 例如 : 想看第 50 列之後的内容 : 
 
    1. 移动指标到卷动棒. 游标变成垂直双箭头. (图 8 - 3a) 
 
    2. 按滑鼠中间按钮 : 游标变成水平箭头 (图 8 - 3b), 且高亮度的顶端跳至游 
       标处.(例如 : 假如你想看的部分从 50 列开始, 你应该将游标移到卷动区 
       的中央) 
 
    3. 假如视窗显示你所要的部分, 则可以放开按钮. 否则 ... 
 
    4. ... 保持按住按钮, 移动指标 : 高亮度部分跟随著指标移动 (而视窗内的 
       本文也随著高亮度区而卷动), 直到放松按钮. 
 
               ┌————————————————┐ 
               │    p86. fig 8 - 3              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 3 游标在卷动区的不同形状│ 
               └————————————————┘ 
 
 
  8.2.2 向前卷动本文 
 
    卷动视窗内的本文使文字列往上移出萤幕顶端 : 高亮度区向卷动棒底部移动, 
视窗内并显示最近打入的本文. 上卷的步骤如下 : 
 
    1. 移动指标到卷动棒. 和前面一样游标变成垂直双箭头. 
 
    2. 按下滑鼠左按钮 : 游标变成向上箭头. (图 8 - 3c) 
 
    3. 放开按钮 : 与箭头在同一列的文字移到萤幕顶端, 且高亮度区也随著调整. 
       ( 以图形来表示,如图 8 - 4. 注意到移动量的多少与你放开按钮时的位置 
       有关 : 若接近顶端, 你可以获得的移动量小, 接近底部则当然可以获得较 
       大的卷动量). 
 
               ┌————————————————┐ 
               │    p87. fig 8 - 4              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 4 在一个视窗内卷动本文  │ 
               └————————————————┘ 
 
 
  8.2.3 向後卷动本文 
 
    向後卷动视窗本文, 文字列由萤幕底部移出, 使你得以看见先前打入的文字列 
. 操作程序类似向前卷动, 但方向相反, 此时使用滑鼠右按钮, 出现向下箭头 (图 
 8 - 3d). 
 
 
  8.2.4 其他卷动选项 
 
    只要你已经启动卷动功能, 有两个Modes选单的选项可供利用. 
 
    Scroll to bottom on tty output (若有 TTY 输出将输出自动卷到底) : 
      若你目前不在卷动区的底部, 稍後某些终端机的输出到达视窗时会自动 
      地移动到卷动区的尾端. 此功能为预设的. 若此功能被关闭, 你要看最 
      新的输出必须自行卷动视窗. 
 
    Scroll to bottom on key press (按键才卷到底) : 若你不在卷动区的底部, 
      稍後你按一个键, 视窗会自动移动至卷动区的尾端. 此功能不预设, 但通常你 
      的终端机设定成当你键入时回应一个字元 : 这些字元为TTY 输出, 且将引起 
      视窗被卷到底部. 
 
 
  8.2.5 以命令列选项控制卷动 
 
    -sb : 允许使用卷动棒. (预设 : 禁能(disable)) 
 
    -sl num : 储存被卷离萤幕的若干列本文. (预设为 64) 
 
    -sk : 致能(enable)当按键才卷到底. (预设 : 禁能) 
 
    -si : 致能当终端机输出时卷到底. (预设 : 致能) 
 
 
 
8.3 记录你与终端机的交谈过程 - 写记录 (logging) 
 
    突现 xterm X11 选单, 并选择 logging 选项. (假如你现在是第二次叫同样的 
选单,在 logging 选项旁边, 你会看到一个沙漏标志 (tick-mark) , 表示它是启动 
的) 从此以後, 所有终端机输出除了被送到萤幕以外, 也会被送至一个档案. 你可 
以获得一个使用过程的永久记录. 预设的状况是将输出写到 xtermlog.pid 档案. 
其中 pid 为xterm 处理识别码. 此档案被建於启动 xterm 时的目录 (你也可以利用 
下面介绍的命令列选项去改变登录档名). 
 
    你可以藉著 xterm X11选单停止或再度logging,反覆的停止和开始logging,你 
可以作选择性的记录,logging 的输出永远附加在登录档案(log-file)之後,每一次 
都不会覆写(overwrite)登录档。 
 
 
  8.3.1 以命令列选项控制登录使用过程 
 
    -l : 致能登录使用过程 
 
    -lf file : 将登录档写入指定档, 以取代预设档 (指定登录档仅设定登录档 
      名而不致能登录功能; 必需另外使用 -l 来致能登录) 
 
使用一个导管 (Pipeline) 作为登录 "档" 
 
   -lf 选择项有一个特殊功能 : 假如 file 引数以导管记号 (|) 开头, 则其馀 
     部分视为登录输出的一个管路. 例如 : 假设你的系统 (shell) 提示是 venus%, 
     使用下列命令去启动 xterm 并记录於 cmdlog 档, 只需键入 
 
           xterm -l -lf '| grep "^venus% " > cmdlog' 
 
 
 
 
8.4 剪与贴本文 
 
    你可以从 xterm 视窗 "剪" (cutting) 部分本文, 亦即拷贝本文到一个 "剪 
缓冲区" (cut buffer), 稍後可被 "贴" (pasting) 回, 亦即取回 (retrieve). 
你可以将本文贴回同一个视窗, 或任何提供相同结构的视窗. 你可以现在或稍後 
"贴" 回, 但你只有一个缓冲区, 後来所 "剪" 的资料将盖掉先前的. 目前被选择 
的部分是以高亮度反白影像显示; 一个有两列文字被选到的xterm视窗显示於 
图 8 - 5。 
 
               ┌—————————————————┐ 
               │    p87. fig 8 - 5                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │图 8 - 5 "剪" 操作中被选择的文字列│ 
               └—————————————————┘ 
 
 
  8.4.1 剪 (cutting) 
 
"剪" 一段文字 : 
 
    1. 移动游标至你想要 "剪" 的那一段文字的一端. 
 
    2. 按下滑鼠左按钮, 并保持按住. 
 
    3. 拖拽游标至该段文字的另一端 : 在你移动的时候介於启始位置与游标位置 
       间的文字会以高亮度显示. 
 
    4. 放开按钮 : 被选到的文字维持高亮度, 任何先前所选择的高亮度本文 (甚 
       至在别的视窗中) 变为非高亮度. 
 
 
  8.4.2 贴 (pasting) 
 
"贴" 一段本文 : 
 
    1. 移动游标至你想要插入一段文字的位置. 
 
    2. 碰触滑鼠中间按钮 : 先前被选定的文字被插入. (目前的选择仍保持高亮 
       度) 
 
    当你将本文 "贴" 入一个视窗, 它真的就像你用键盘打入的一样 -- 你可以使 
    用正常的列编辑键去消除字元, 单字, 或整列 (当然假如 "贴" 了许多列, 你 
    只能编辑最後一列, 就像你只能编辑最後敲入的一列一样). 
 
注意 : 假如你试图 "贴" 太多文字到一个 xterm 视窗, xterm 可能永远悬(hang) 
       在那里. (我们试"贴" 过多到 4000 个字元没有问题, 但这个值并不保证永 
       远不发生问题.) 
 
 
  8.4.3 剪一个字或一列 
 
    假如你想剪一个字或一列, 你可以直接选择它而不需拖拽过它. 
 
    "剪" 一个字 : 指标移到一个字的任何位置, 并碰触两次滑鼠左按钮 : 该字 
    即被选择. 
 
    "剪" 一列 : 指标移到一列的任何位置, 并碰触三次滑鼠左按钮 : 该列即被 
    选择. 
 
    碰触滑鼠按钮两次与三次是所有以滑鼠基础(mouse-based) 的系统之共同用法, 
但在这个例子有特殊的功能: 连续而独立的几次碰触与一个多次碰触是不同的,其 
差异取决於介於按下按钮(button-down)与松开按钮(button-up)的期间内有没有其 
他的事发生. 所以下列算作碰触三次 : 
 
    DOWN ... pause for a few seconds ... UP DOWN ... another 
    pause ... UP DOWN ... pause 
 
这是很有用的 : 因为在碰触後只要你保持按下, 只要更进一步藉著使用 up/down, 
你可以改变选择模式 (字元, 字, 列)。 
 
 
  8.4.4 扩大一个选定区块或 "剪" 
 
    只要你有一个选定区块, 你可以扩大它 (或缩减它), 如下 : 
 
    1. 移动指标至你想选择的新端点, 它可以是在已存在的一个区域□面 (当你 
       想缩减它时) 或外面 (当你想扩大它时) 
 
    2a. 碰触滑鼠左按钮 : 选择区的端点调整为目前指标位置. 或 ... 
 
    2b. ... 若以按下、拖拽和放开按钮来取代碰触. 在这个状况下, 选择区跟随 
        游标变动, 且为高亮度. 
 
    有一个方便的技巧可以选定文字区块, 首先标定你想选定的本文之一端, 碰触 
滑鼠左按钮, 然後移至另一端碰触滑鼠右按钮 : 中间的文字即被选定. (这是扩大 
选定区的变相方法. 开始时选择区是空的 - 即你已碰触滑鼠左按钮, 但没拖拽通 
过任何文字 - 然後你碰触滑鼠右按钮来扩大这个空选定区.) 
 
 
  8.4.5 字或文字列边界的选择 
 
    假如你想选择一些字或文字列, 你可以藉著在碰触按钮之前小心地定位指标来 
完成.但这里有一个简捷的方式 - 再次利用多次碰触按钮. 选择文字或文字列 : 
 
    1. 将游标移到你想 "剪" 的文字之一端. 
 
    2. 按下滑鼠左按钮, 并保持按著 ... 
 
    3. ... 拖拽游标至你想要 "剪" 的文字之另一端 : 启始点至游标间的本文为 
       高亮度. (如图 8 - 6 上图) 
 
    4. 放开并迅速连续地再按下按钮 : 高亮度区扩展至最接近单字的边界. (图 
       8 - 6 中图) 
 
    5. 放开并迅速连续地再按下按钮 : 高亮度区扩展至已选定列的尾端. (图 
       8 - 6 下图) 
 
    6. 放开并迅速连续地再按下按钮 : 高亮度区回复至原来的大小, 亦即选定区 
       回到字元边界. (图 8 - 6 最上面) 
 
    相同的技巧可应用於以右按钮扩展已选择的区块. 
 
               ┌—————————————————┐ 
               │    p92. fig 8 - 6                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │ 图 8 - 6 以字元, 字与列 "剪" 文字│ 
               └—————————————————┘ 
 
 
8.5 使用 Tektronix 模拟功能 
 
    xterm 可以模拟一个 Tektronix 4014 终端机和一个 VT102 终端机, 使你可 
以用它来显示图形. 当你在一个远方机器执行 非-X应用程式而想在你的显示器 
上看图时, 特别有用. 
 
  xterm 为每一个 "终端机" 使用一个不同的视窗, 所以你可以将所有文字显 
示於一个视窗, 而另一个视窗显示图形, 如图 8 - 7. 某个时间只有一个视窗活 
动(active)著, 亦即所有的键盘输入或被 "贴" 入的本文 -- 被导引至活动视窗 
, 甚至当指标在别的视窗时也一样. 
 
你可以使用终端机的逃脱序码 (escape sequence) 或使用 modes 选单选择你需 
要的视窗.你可以使用你的视窗管理器完全分开地处理两个视窗. 例如 : 你可以 
表徵图化 VT 视窗,然而保留一个开启的 Tek, 等. 你也可以使用适当的 xterm 
选单选项 (Tek Window Showing, Hide VT Window, 等) 去隐藏或显现一个视窗 
因而显现或隐藏其他视窗. 
 
注意 : 隐藏不是将它送到堆叠的底部, 或表徵图化. 假如你使用选单 "隐藏"一 
       个视窗, 当下次你要求再出现时你必须像开启一个新的应用视窗一样地安 
       置 (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. 在继续探讨它们之前我们先在下一章看看一些虽然小但有用的程式. 

BBS水木清华站∶精华区