📄 00000006.htm
字号:
标移出,盒的外框恢复正常 -- 这是unhighlight() 作用。将指标再度移入 <BR> Help 盒,按下一个滑鼠按钮,保持按住不放。则盒内的色彩反转 (盒内的文 <BR>字变成预设的背景色,而原来视窗的背景变成视窗的前景色)。-- 这是set() <BR>在作用。继续保持按住滑鼠按钮,将指标移出视窗外,盒内色彩恢复正常 -- <BR>这是reset() 在作用。一个正常 "碰触一下" (clicking on) Help盒的次序为: <BR> <BR> 1. 移动指标进入盒中:highlight()将外框变为高亮度。 <BR> <BR> 2. 按下按钮:set() 反转盒中的色彩。 <BR> <BR> 3. 松开按钮:notify()开始作用,造成程式建立求助视窗(help window) <BR> 。在进行中时,盒的色彩保持反相。当视窗建立完成之後,reset()反 <BR> 转盒内的色彩为正常,但外框仍保持高亮度。 <BR> <BR> 4. 将指标移出视窗:unhighlight()将外框恢复正常。 <BR> <BR> 现在你了解了有哪些作用,我们将定义一些转译来改变原先进出视窗的作 <BR>用: <BR> <BR> *Command*translations: #override\n\ <BR> <EnterWindow>: reset()\n\ <BR> <LeaveWindow>: set() <BR> <BR>用这个奇怪的转译表,当你一开始移动指标进入盒中,什麽事也不会发生,但 <BR>当你移出指标时,色彩会反转。如果你再度移动指标进入盒中,色彩会变回正 <BR>常。其它的作用和前述相同。 <BR> <BR>使用修饰键来修饰事件规格 <BR> <BR>有时你指定的转译希望能同时按下一或多个修饰键 (modifiers) ,例如你要系 <BR>结一个作用到和META键同 <BR> 3. 松开按钮:notify()开始作用,造成程式建立求助视窗(help window) <BR> 。在进行中时,盒的色彩保持反相。当视窗建立完成之後,reset()反 <BR> 转盒内的色彩为正常,但外框仍保持高亮度。 <BR> <BR> 4. 将指标移出视窗:unhighlight()将外框恢复正常。 <BR>例如在xterm 中,定义meta-i为 "贴" 上一次 "剪" 的本文,使用: <BR> <BR> *VT100*Translations: #override\ <BR> Meta <Key>i: insert-selection(PRIMARY, CUT_BUFFER0) <BR> <BR>因为这种修饰键/事件型态的组合十分常见,转译管理器允许使用一种缩写的 <BR>形式。相等於上面第二列的写法为: <BR> <BR> <Meta>i: insert-selection(PRIMARY, CUT_BUFFER0) <BR> <BR> 我们可以对滑鼠事件做同样的处理。让我们对xedit 定义转译,使得使用 <BR>滑鼠可以在本文上方便地移动,我们首先的尝试如下: <BR> <BR> *Text*Translation: #override\ <BR> Shift <Btn1Down>: forward-character()\n\ <BR> Shift <Btn2Down>: forward-word()\n\ <BR> Shift <Btn3Down>: next-line()\n\ <BR> Ctrl <Btn1Down>: backward-character()\n\ <BR> Ctrl <Btn2Down>: backward-word()\n\ <BR> Ctrl <Btn3Down>: previous-line() <BR>如果你测试它,奇怪的现象会发生 -- 游标好像会自行其是,而且本文的片段 <BR>会一下子被选择,一下子又取消选择。发生这种现象的原因是Text widget 的 <BR>预设系结仍然会作用,它包含的转译像: <BR> <BR> <Btn1Up>: extend-end(PRIMARY, CUT_BUFFER0) <BR> <BR>你可能认为这不会影响你,因为当你松开按钮时你总是按著SHIFT 键或CTRL键 <BR>。但事实上会作用:转译管理器对於你未定义的修饰键解释为你不在乎它们的 <BR>影响,所以松开Button1 时会对应到上述的规格。为了克服这点,我们对那些 <BR>可能不小心便会发生的按钮松开事件定义转译,并系结到一个空 (null) 作用 <BR>。这些转译当被对应到时会盖掉预设的转译。对使用Text widget 我们需再增 <BR>加两列,才是一个完整的转译表: <BR> <BR> *Text*Translation: #override\ <BR> Shift <Btn1Down>: forward-character()\n\ <BR> Shift <Btn2Down>: forward-word()\n\ <BR> Shift <Btn3Down>: next-line()\n\ <BR> Ctrl <Btn1Down>: backward-character()\n\ <BR> Ctrl <Btn2Down>: backward-word()\n\ <BR> Ctrl <Btn3Down>: previous-line()\n\ <BR> Shift <BtnUp>: do-nothing()\n\ <BR> Ctrl <BtnUp>: do-nothing() <BR> <BR>这解释了下列几点: <BR> <BR> .我们对滑鼠事件使用了缩写的语法,也就是先前的语法像<BtnDown>Button1 <BR> 以<Btn1Down>取代。转译管理器容许一些缩写的语法存在。 (我们在前 <BR> 面看到的 <Meta> 也是一例)。 <BR> <BR> .我们用 do-nothing() 当作一个哑 (dummy)作用,就好像它是列在Text <BR> widget的文件中一般。事实上这个作用是不存在的,因此会导致错误的 <BR> 讯息出现,但因为我们本来就是要用它来什麽事也不做的,所以无需介 <BR> 意。 <BR> <BR> .对於我们方才指定的哑作用,我们用了一个事件 <BtnUp>便代表了三个 <BR> 按钮。相同地,转译管理器把从缺的修饰规格的解释为 "对任何",在一 <BR> 个事件中缺少细节部份 (例如在规格"<BtnUp>Button1"中"Button1"的部 <BR> 份) 解释为 "对任何所有的细节部份"。 <BR> <BR> 这点在转译中有一个非常常用的形式为: <BR> <BR> <Key>: ... <BR> <BR> 因为缺少细节部份,所以可被用於所有按下键 (key-press)事件,也就 <BR> 是对所有的键。事实上在Text widget 上有一个预设的转译为: <BR> <BR> <Key>: insert-char() <BR> <BR> insert-char()作用的功能为当一个键被按下时,插入相对应的ASCII字 <BR> 元。 <BR> <BR> 17.1.4 复合的转译表及□例 <BR> <BR>到目前为止,我们把所有的转译均应用於整体的widget类别。但你能对个别的 <BR>widget指定转译,就如同resource一般。在此我们将对xman定义更多的转译。 <BR>我们将对Help盒widget (对应作用到助忆(mnemonic)字元)只用到键盘事件,对 <BR>Quit盒只用到视窗事件。为了达到此点,我们将对转译应用到的widget 给予明 <BR>确的名称。我们的转译表如下: <BR> <BR> *Help*translations: \ <BR> <Key>h: highlight()\n\ <BR> <Key>u: unhighlight()\n\ <BR> <Key>n: notify()\n\ <BR> <Key>s: set()\n\ <BR> <Key>r: reset()\n\ <BR> <Key>LineFeed: set() notify() <BR> <BR> Quit*translations: #override\n\ <BR> <EnterWindow>: reset()\n\ <BR> <LeaveWindaw>: set() <BR> <BR>有几点特别的语法需要注意: <BR> <BR> .在此我们对相同类别中不同的widget指定不同的转译,所以我们需要知 <BR> 道成员 (instance) 名称。不幸的是,这些成员名称 (Help,Quit, <BR> Manual Page)并不明显。如果它们在文件中找不到 (本例即找不到),那 <BR> 你只能用猜的或是去查看原始程式了。 <BR> <BR> .对於Help,我们省略了常用的#override,因为我们对此widget不需要考 <BR> 虑任何预设的系结。特别的是,当指标进入视窗时,我们不要此widget <BR> 呈现高亮度,如此我们才能看出这个转译的效用。 <BR> <BR> .由於省略 #override,我们将这个转译规格移至第一列。(如果不这麽作 <BR> ,而且对第一列仍以\n\ 作结束,我们将得到错误: <BR> <BR> X Toolkit Warning: translation table syntax er- <BR> ror: Missing ':' after event sequence. <BR> X Toolkit Warning: ... found while parsing '' <BR> <BR> 因为\n是用来区隔转译规格或类似像 #override 指令的)。而将此列和 <BR> 第一个规格以隐藏的新列字元区隔,就如同: <BR> <BR> *Help*translations: \ <BR> <Key>h: highlight()\n\ <BR> ... <BR> <BR> .对LineFeed那一列的转译,包含了复合的作用,和前面xterm 中复合的 <BR> string()作用类似。 <BR> <BR> 我们已大致涵盖了你所常用的转译。基本的概念很简单,生成它们的结构 <BR>也不复杂,但它们非常的令人迷惑。原因是它是一个发展中的糸统,随著发行 <BR>版本所附的文件并不是很多。下一节重复本节所述的,本节均以例子来介绍观 <BR>念,下一节我们将对转译的规则,作比较正式的描述。 <BR> <BR>17.2 转译 -- 格式和规则 <BR> <BR>转译是一个由Toolkit 提供的一般性结构,它让使用者指定当某些特定的事件 <BR>由widget接收到时,一个widget应完成何种作用。Toolkit 中处理转译的部份 <BR>被称之为转译管理器。 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -