xterm 中功能键具有非连续键序列的历史原因

xterm 中功能键具有非连续键序列的历史原因

我使用 gnome-terminal 作为我的终端模拟器,它设置TERM=xterm-256color.按下功能键F1、 、 …时发送的按键序列F2如下打印:

$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~,   # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5 
key_f18=\E[17;2~,

# gap …我想知道为什么按键序列中有间隙(用 标记)。 “缺失”的按键序列(例如\E[16~)不会以其他方式使用,如infocmp -L1 | grep -F '\E[16~')所示。

现代键盘将功能键分为每组四个键的组,因此这些组之间的间隙是可以理解的。一些历史悠久的键盘将一些功能键分为一组,每组五个键,因此这些组之间的差距也是可以理解的。然而,间隙有时(但不总是)在 4 个按键组之间,有时(但不总是)在 5 个按键组之间,这会导致某些功能键构建只有 1 个或 2 个按键的组 – 我没有听说过具有这种布局的任何键盘。

这些按键序列的原因是什么?键盘布局之间的兼容性(每个键盘布局有 4 个或 5 个功能键)似乎不太可能,因为一种布局的间隙会破坏另一种布局,反之亦然。

答案1

gnome-terminal 复制了 xterm 最常用的键盘配置。

反过来,xterm 使用键分配来匹配 DEC VT220,例如,它的LK201键盘。这些弥补了大部分差距。 F1-F4和F13-F16中使用的不同编码并非来自VT220。 VT220 上的 F1-F5 是当地的默认情况下为功能键(通常不向主机发送任何内容)。

相反,F1-F4 代码是VT100 数字键盘的顶行它不适合 X 键盘配置,因为数字键盘(的第一个键被保留了。 F13-F16 使该解决方法适应 xterm 的修改功能键(例如,其中转移 修饰语导致 xterm 发送;2按键序列的一部分)。

某些 VT220 键有其他名称(例如,F16 是帮助键),但 xterm 对这些名称没有用处(因为它们是特定于应用程序的)。如果它确实在终端描述中使用了这些名称,则列表中将会出现更多空白。但 VT220 特有的差距与 DEC 硬件终端上的功能键组有关。

$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~,   # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5 
key_f18=\E[17;2~,

xterm-r6 终端描述对于 F1-F4(和 F13-F16)没有这些更改,但显示了预期的差距:

> infocmp -L1 xterm-r6 | grep key_f | sort -V
        key_f1=\E[11~,
        key_f2=\E[12~,
        key_f3=\E[13~,
        key_f4=\E[14~,
        key_f5=\E[15~,
...
        key_f6=\E[17~,
        key_f7=\E[18~,
        key_f8=\E[19~,
        key_f9=\E[20~,
        key_f10=\E[21~,
        key_f11=\E[23~,
        key_f12=\E[24~,
        key_f13=\E[25~,
        key_f14=\E[26~,
...
        key_f15=\E[28~,
        key_f16=\E[29~,
...
        key_f17=\E[31~,
        key_f18=\E[32~,
        key_f19=\E[33~,
        key_f20=\E[34~,
        key_find=\E[1~,

(gnome-terminal 实际上并不是一个 VT220 模拟器,因为它缺乏几乎所有的字符集功能,而是一个 xterm-imitator)。

相关内容