11

我很难理解 xmodmap clear 命令,这是一个示例

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
    keycode 117 = Caps_Lock
    add Lock = Caps_Lock
  1. Control_L已经映射到66了,为什么还要在第3行加上Control呢?
  2. 为什么我在实际添加 Control 时必须清除 Lock?
  3. 为什么在我实际添加 Caps_Lock 之前不清除 Lock?

这真是令人费解。

4

1 回答 1

18

xmodmap 中重要的是区分键码(来自键盘的原始数字)、键符(键的最终含义)和修饰符标志,它们是键上的标志(不是键符)。说“我说的这个东西是shift键应该修改其他键为shift键”

让我们用这些“类型”注释您的示例

keycode (keycode)66 = (keysym)Control_L
clear (modifier)Lock
add (modifier)Control = (keysym)Control_L
keycode (keycode)117 = (keysym)Caps_Lock
add (modifier)Lock = (keysym)Caps_Lock

现在我们可以更好地了解每一行的作用:

keycode 66 = Control_L
将大写锁定键与控制键的含义相关联(但不作为修饰符)

clear Lock
将删除以前具有修饰符的任何键的修饰符标志Lock(如代码 66 所代表的大写锁定键最有可能具有)

add Control = Control_L
将 control 修饰符添加到与 keysym 关联的键Control_L(可能是键码 66 和原始左控制键)

keycode 117 = Caps_Lock 将键码为 117 的键分配为大写锁定(我不确定 117 是什么,我的键盘没有。)

add Lock = Caps_Lock使用闪亮的新绑定 117 键码将Lock修饰符重新 添加到键符上。Caps_Lock

所以,直接回答你的问题:

1、Control_L已经映射到66了,为什么还要在第3行加上Control?

您需要修饰符和键符才能使修饰键正确地充当修饰符。(对我来说似乎有点奇怪,但就是这样)

2. 为什么我在实际添加Control时必须清除Lock?

因为与 keycode 66 关联的键仍然会Lock设置修饰符。修饰符不会被覆盖,您必须清除它们。

3. 为什么在我真正添加 Caps_Lock 之前不清除 Lock?

你也可以这样做,它同样可以很好地工作,因为Lock目标是修饰符,当你弄乱键盘符号时它不会改变。


xmodmap 可能是一个非常难以配置的野兽,以下是我在尝试理解它时使用的一些链接:

  1. http://cs.gmu.edu/~sean/stuff/n800/keyboard/old.html
  2. http://www.jwz.org/xkeycaps/man.html
  3. http://www.in-ulm.de/~mascheck/X11/xmodmap.html

如果有什么我可以尝试更清楚的,请告诉我。

于 2013-07-27T06:31:28.660 回答