bind -p
我在和 中都找不到映射stty -a
。另外,它仅适用于我尝试过的终端模拟器(xterm、konsole、gnome-terminal),而不适用于 Linux 系统控制台。我认为它传统上是一个 emacs 映射。
编辑:当我输入^V^/
bash prints时^_
,它被映射到绑定中的撤消。但是^/
映射到哪里呢^_
?
答案1
答案2
作为一般规则,control修饰符通过删除最后 5 位的所有字符来作用于 ASCII 字符。它将几个不同的字符映射到0..31
用于 ASCII 控制字符的范围。
根据该规则,人们会期望使用修饰符将它们映射到 031 control:
037 31 1F US (unit separator)
077 63 3F ?
137 95 5F _
177 127 7F DEL
这些不会:
057 47 2F /
117 79 4F O
157 111 6F o
或者,control修饰符可以仅适用于范围内的字符32..63
,使用键的类比shift,该键在 ASCII 中用于将范围映射64..94
到96..126
(大写/小写字母)。在这种情况下,这些可能映射到031
:
037 31 1F US (unit separator)
057 47 2F /
077 63 3F ?
而且(已经有一段时间了),@aprogrammer 的观察听起来很熟悉。但VT100手册中没有。在第3章,它指向一个记录键及其控制等效项的表。它使用完整 95 个字符范围 (32..126) 中的代码,但仅记录每个控制字符的一种情况。其他可能的字符都没有记录。但要注意表文件control?。我的键盘上?有一个转移钥匙。我找到的 VT100 键盘的图片中没有将其作为未移动的键。并且(毫不奇怪)该特定键的未移位代码是/。 DEC 可能已经根据早期终端的现有密钥记录了这些内容,但他们这样做也可能是为了保持表格简短。
然而,转换并不完全达到xterm
。它接收具有特定键码以及修饰符信息的 X 事件。一般来说,这些键码对应于键盘上显示的字母,而修饰符(例如shift和 )control是单独传递的。 xterm
使用 X 运行时函数,例如Xutf8LookupString
或XmbLookupString
组合一些事件(例如shift)。这就是决定翻译的地方这些控制字符。 xterm
稍后细化/修改信息特殊键(例如backspace
),但大部分转换是在 X 库中使用键盘配置完成的。
进一步阅读: