使用键盘映射

下面的模型显示了应用程序如何使用输入方法。 使用这一信息有助于您定制键盘映射。

输入处理分为三步:

  1. keycode/keystate (原始)-> keysym/modifier (新)

    这一步和应用程序以及环境有关。 应用程序负责将原始键事件映射为表示输入方法输入的键符/组合键。

    在 AIXwindows 环境中,客户机使用服务器的键符表 xmodmap(安装在服务器上)来执行此步骤。 xmodmap 定义了 Shift、Lock 和 Alt-Graphic 键的映射。 客户机使用 xmodmap 以及来自 X 事件的 Shift 和 Lock 组合键来确定本次事件所代表的键符/组合键。

    例如,如果同时按下了 Shift 组合键和 XK_a 键符,xmodmap 将其映射为 XK_A 键符。 因为使用了 Shift 键来将键码映射为键符,应用程序应该掩去来自原始 X 事件的 Shift 组合键。 其结果就是,输入方法的输入变为 XK_A 键符,并且没有组合键。

    在另一种环境中,如果设备未提供其他信息,输入方法同时收到 XK_a 键符和 Shift 组合键。 对于这两种情况,输入方法应该执行相同的映射,并返回字母 A。

  2. keysym/modifier (新建)-> 本地化字符串

    此步骤依赖于本地化的 IMED,且随每种语言环境而不同。 它通知 IMED 发生了键事件,并且请求 IMED 是否将这个键事件作为内部使用的指示。 这发生在应用程序调用 IMFilter 子例程的时候。

    如果 IMED 指示该键事件正是用于内部处理,那么应用程序忽略该事件。 由于 IMED 第一个看到该事件,因此此步骤应该在应用程序解释该事件之前完成。 IMED 只使用那些基本的键事件。

    如果 IMED 指示该事件不用于内部处理,那么应用程序执行下一步。

  3. keysym/modifier (新建)-> 定制字符串

    当应用程序调用 IMLookupString 子例程时,会发生这一步。 输入方法键映射(由 keycomp 命令创建)定义了此阶段的映射。 这是将键事件映射为字符串的最后一次尝试,并且允许用户定义该映射。

    如果在输入方法键映射(imkeymap)中定义了这个键符/组合键(新)的组合,就返回一个字符串。 否则,该键事件对于输入方法来说未知。