X Window 系统使用指南--键盘和滑鼠--对应和参数


第18章 键盘和滑鼠 -- 对应和参数
在前章我们看到了Toolkit 所提供的转译结构 , 它让你对一个应用程式的个别
成员 , 定制你的键盘和滑鼠 。在本章 , 我们来看另一种较低层次的定制 , 它是
由server所管理 , 称之为对应(mapping) , 你只需要告诉server你的键盘所需
的不同的配置 , 它就会被每一个连接到你server上的应用程式应用到 。例如:
取代通常的QWERTY键盘 , 你可能希望重新安排键盘以适应那些对键盘并不熟悉
的使用者 (你可能把键盘按ABCDEF... 重新排过 , 当然键盘按钮上所印的字也
需更改成相符) 。你也能对一些Control , Shift等等的修饰键作指定 。对滑鼠
按钮 , 一样有一个相关的对应 , 可将 "逻辑的" 按钮对应到实际动作 。整体而
言 , 你使用这些键盘和滑鼠的对应的频率 , 将小於转译 。
此外 , 尚有非常常用的第三种型态的定制可用:你可以设定有关你键盘和
滑鼠各种不同的参数 。例如响铃声音的大小 , 按下键时是否有滴答声等等 。在本章 , 我们先描述键盘、滑鼠和修饰键的对应 , 接下来描述你如何使用
xset程式 , 来定义类似像键盘有无滴答声的参数设定 。18.1 键盘和滑鼠对应 -- xmodmapserver本身处理一个层次的定制 , 它对於所有使用到此server或显示器的应用程
式均发生效用:这就是键盘对应 (keyboard mapping) 。每一个键 , 有一个单独的码对应它 , 称之为键码(keycode) 。键和键码之间
的关系是绝对固定的 。(粗略来说 , 你可以说 "键码就是键") 。连接到每一个键码 (或键)的是一个keysym的表列 。一个keysym是一个代表
印在键盘符号上的数字常数 。在预设的情况 , 大多数的键只有一个keysym 与之
对应 , 例如 SHIFT , A , B , Delete , Linefeed等等 。keysym既非ASCII或EBCDIC
字元 , 也非server用以维持keysym和字元的关系 。你可以对每一个键有两个
keysym 。在预设对应中 , 有很多连接到两个keysym的键 , 例如冒号(:) 和分号(;)
, 7 和 &等等 。对一个键附属的keysym表列中 , 第一个keysym是未按下修饰键
的状况下的键 。第二个keysym是指当SHIFT (或Lock)已被同时按下时的键 , 如
果在表列中只有一项 , 且为字母 , 则系统自动假设第二项为相对的大写字母 。
超过两项的keysym并没有特别的意义 , 键盘和keysym之间的关系被称之为键盘
对应 。尽量地以server处理一般的键和keysyms。它对键码没有附属意义 , 且它
自己本身不会使用对应从键码对应至keysyms :它只是传递资讯给clIEnt应用
程式 。特别的是 , server对ASCII 或其它的字元集合 (character sets) 毫无
概念;它只是说明 "某键被按下 , 某修饰键也同时被按下 , keysym表列中某
keysym和某键相关"。它是client (典型的使用标准的X Library) 对keysym
和修饰键附属的意义:例如 , 它决定如果keysym产生时ctrl也被按下 , 它必需
被解释为ASCII 字元 hex 0x1 , 也就是说ctl-A 。特定的client可以决定特殊
的修饰键的意义;例如在xterm 中 , 当你和MTEA键同时按下一个键 , 程式将此
转换为ESC 後面跟随著被按下的字元 。(也就是说 , 如果你按下meta-A , 实际
上会产生两个字元 ASCII 0x1b, ASCII 0x41) 。server在此领域内提供一个额外的设施 。你可以定义让server将键码解释
成修饰键 , 例如 "当键码为若干的键被按下时 , 它相同於CONTROL修饰键被实际
按下" 。这种定义并不互斥:如果你定义键F7为Shift 修饰键 , 它并不会影响任
何现存的修饰键 。此种设施称之为修饰键对应 (modifier mapping) 。X提供八
个修饰键:Shift、Lock(caps-lock)、Control、Mod1到Mod5 。习惯上 , Mod1被

推荐阅读