📄 00000006.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER> <BR> 第17章 定制你的键盘和滑鼠 -- 转译 <BR> <BR> <BR> 电脑的键盘通常含有一些 "特殊功能" (special function)键,在此有一 <BR>些方法来 "制定"(program)这些特殊功能键,使它们能完成特定的功能以适合 <BR>你工作的方式。例如,你可以定义一些键来输入那些你常用的命令,或只需按 <BR>一个键便能够输入一些程式的片段。 <BR> <BR> 在X中,你能制定的不只是功能键而已,其它一般的键和滑鼠的按钮也都 <BR>可制定。对每一个应用程式,你均可指定特别的功能给键盘和滑鼠按钮,或两 <BR>者之组合。 (例如在 xedit中你可以结合SHIFT 键和滑鼠的右按钮来让你向前 <BR>移动一个单字)。 所有使用X Toolkit的程式均允许使用者利用一个被称之为 <BR>键盘转译 (translations) 的设施来执行此种定义,且此种定义藉著正规的 <BR>resources 结构传递给应用程式。 (那些不使用X Toolkit的应用程式,同样 <BR>地也可以用相同的设施来制定, 但它们需个别的定义所以不能广泛地应用,从 <BR>现在起,我们假设每当讨论有关转译的种种,均为对那些使用X Toolkit的应 <BR>用程式而言。) <BR> <BR> 就如同所有的 resources一样,转译是当应用程式执行时才被处置。例如 <BR>你可以拥有数个具备不同转译设定的 xedit,在同时一起执行。( 你可以让一 <BR>个xedit 适合编辑本文,另一个适合编辑程式码,而另一个适合编辑文书)。 <BR> <BR> 本章讨论转译 -- 包刮它们的定义格式,如何将它们设定到应用程式,和 <BR>它们所涵盖功能的□围。我们首先以实例来介绍,逐渐地导引你看到不同的角 <BR>度。而後比较正式和详细地讨论转译。最後,我们列出当你使用转译时常会碰 <BR>到的错误,并给你一些如何克服这些问题的提示。 <BR> <BR>17.1 实际使用转译 <BR> <BR> Toolkit 转译结构最简单的用途便是让你制定你键盘的键。例如,当你使 <BR>用xterm 为一个执行一般shell 命令的视窗时,你可能希望定义一些特殊功能 <BR>键来输入你常用的命令,且希望指定的关系如下: <BR> <BR> 当我按下这个键时... 我希望这个字串被输入 <BR> <BR> F1 rm core *.tmp <newline> <BR> <BR>利用Toolkit 达到此目的方法为:指定一个值给使用转译的widget中的resources <BR>。此值设定应用程式中所必需的定制 (customisation),且被Toolkit 的 Trans- <BR>lation Manager (转译管理器) 所处理。此 resources属於类别Translation, <BR>且其成员名称几乎一定是translations。 <BR> <BR> 在下一节我们将看到设定到resources 中的值的格式。 <BR> <BR> 17.1.1 如何对一个应用程式指定转译 <BR> <BR> 对前述xterm 的例子,我们定义 (在即将被应用程式读入的resource资料 <BR>库中或一些resource档案中) 一个规格类似: <BR> <BR> xterm*VT100*Translations: (contd.) <BR> <key>F1: string("rm core *.tmp") 注意:不完整!! <BR> <BR> 其意为在任何类别 VT100的 xterm widget 中,当键 F1 被按下时,插入 <BR>字串 "rm core *.tmp")。 <BR> <BR> 不幸的是,并没有这麽简单,转译管理器会把上面的规格解释为 "去掉所 <BR>有现存的转译,且加入... " ,所以所有正常的像 " A键是插入一个 A" 这种 <BR>系结 (binding)都会消失。为了克服这点,你必需使用一些被称为 directive <BR>(指引)的语法插入在 resource 值之前: <BR> <BR> xterm*VT100*Translations: #override(contd.) <BR> <key>F1: string("rm core *.tmp") <BR> <BR> 通常你会希望保持大部份现存的系结,而只是把你明确指定的值覆盖上去 <BR>,所以你一般都是在你的转译表中,指定 #override。 <BR> <BR> 现在这个规格可以开始工作了,藉著启始一个 xterm且把此规格 (在两个 <BR>单引号 (')中间的部份) 当成选项 -xrm 的引数来测试它: <BR> <BR> xterm -xrm 'xterm*VT100*Translations: ... 等等' <BR> <BR> 按下特殊功能键 F1,你将看到指定的字串成功的插入,但并未包含新列字元 <BR>(newline) ,你可以用一点语法的技巧来克服它,像: <BR> <BR> xterm*VT100*Translations: #override(contd.) <BR> <key>F1: string("rm core *.tmp")string(0xd) <BR> <BR>这解释了以下两点: <BR> <BR> 1. string()的作用和它的引数相关。你可以直接输入本文 (例如 string(lpq)) <BR> ,但如果本文包含空白或非字母字元,则必需在本文前後加上双引号。 <BR> 如果引数是以 "0X" 开头,则将其後解释为十六进位,并插入相对的 <BR> ASCII 字元。(例如,0xd是RETURN) <BR> <BR> 2. 在你指定此功能时可结合一个以上的作用,在上例,我们用到 string() <BR> 作用两次,如果我们知道其它的作用,我们也一样可以系结起来。 <BR> <BR>定义许多的转译在一起 <BR> <BR>你可以根据需求在一个表中定义许多的转译。假设,我们在前面的转译中增加 <BR>系结: <BR> <BR> 当我按下这个键时... 我希望这个字串被输入 <BR> <BR> F2 lpq-Plpa3 <newline> <BR> <BR>对此的转译为: <BR> <BR> <Key>F2: string("lpq-Plpa3")string(0xd) <BR> <BR>所以可以将本列加入前面的表中。但是转译管理器的格式规则告诉我们必需将 <BR>两个转译以 "\n" 分开且独立成为一列: <BR> <BR> xterm*VT100*Translations: #override(contd.) <BR> <key>F1: string("rm core *.tmp")sting(0xd) \n(cond.) <BR> <Key>F2: string("lpq-Plpa3")string(0xd) <BR> <BR>以上的形式将造成管理上的困难,你可以藉著包含 "隐藏的新列字元" 来使它 <BR>具可读性一些: (新列字元以倒斜线 "\"处理) <BR> <BR> xterm*VT100*Translations: #override\n\ <BR> <key>F1: string("rm core *.tmp")sting(0xd)\n\ <BR> <Key>F2: string("lpq-Plpa3")string(0xd) <BR> <BR>你可以放置任意多个你所需的 "隐藏的新列字元" , 且几乎在任何地方均可, <BR>它们只是被忽略而已。 (只要和转译管理器相关,甚至你每隔一个单字便使用 <BR>一个也没关系。但千万不要在一个规格的 resource 特徵部份使用它们,它们 <BR>无法被resource manager解释,也没有相同的效果。) 如果你感觉有些混淆, <BR>不用担心。简单地说,resource结构需要的是要在一列中的一个resource规格 <BR>的 "值" 的部份,而转译管理器以分开的列来分开 (也就是以\n终结),而使用 <BR>者刚好以每一个实际分开的列代表一个意义以增加可读性,所以规则很简单: <BR>在除了最後一列的每一个转译列均加上一个 "\n\"。 <BR> <BR> 17.1.2 转译可系结许多型式的作用 <BR> <BR>上述的 xterm□例,展示了如何能够当你按下一个键时,插入任意的字串。但 <BR>转译结构的功能比这更多 -- 它可以系结任何widget所提供的作用到按键,让 <BR>我们详细一点地看一下这些作用。 <BR> <BR> 前述的例子,我们在 xterm的 VT100 widget完成了键F1和F2在 string() <BR>上的对应。我们将仍以 xterm为例,说明更多的作用。 <BR> <BR> 查阅xterm 的指南页,在标题KEY TRANSLATIONS 和 KEY/BUTTON BINDINGS <BR>你将发现列有数个作用。我们将定义一个转译对应键F3到insert-selection() <BR>作用之上,所以我们可以用键盘来取代滑鼠,将先前 "剪"下的本文 "贴"出。 <BR>指南页告诉我们此作用需要一个引数,从列出的预设系结,我们可以看出预设 <BR>的 "剪贴" 结构为使用 CUT_BUFFER0, 所以我们将CUT_BUFFER0当作引数。我们 <BR>的resource规格是: <BR> <BR> xterm*VT100*Translations: #override\n\ <BR> <key>F3: insert-selection(CUT_BUFFER0) <BR> <BR>到目前为止,这只是一点小小的便利。然而,假定说你花了许多时间在本文文 <BR>件上工作,你用 tbl格式化,你用 nroff在萤幕上预视 (preview)它们,用 <BR>troff 排版,且将输出送到你的一个用过滤器 (filter) 为tr2printer的印表 <BR>机上。设定转译为: <BR> xterm*VT100*Translations: #override\n\ <BR> <key>F3: string("ed") insert-selection(CUT_BUFFER0)\ <BR> string(0xd)\n\ <BR> <key>F4: string("tbl") insert-selection(CUT_BUFFER0)\ <BR> string("| nroff -man") string(0xd)\n\ <BR> <key>F5: string("tbl") insert-selection(CUT_BUFFER0)\ <BR> string("| troff -man -t | tr2printer") string(0dx) <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -