根据这张终端模拟器及其键码表,新版本的 XTerm 可识别从 F1、F2、F3...一直到 F63 的功能键。大多数键盘仅具有 F1..F12 范围内的物理功能键。额外的钥匙的用途是什么?是否存在从物理键或鼠标按下到这些功能键数字的某种(半)标准映射?如果没有,它们是如何触发的?
我的印象是,在传统的终端用语中,所有特殊键,包括箭头键、home/end 等都称为功能键(而我们这些在 PC 上长大的人只会认为 F1..F12 是功能键)键)。但是,XTerm 还单独讨论这些命名键(例如,kUP
该表中的向上箭头键)。
答案1
DEC VT 代表功能键以及各种光标和编辑键,其控制序列名为 DECFNK,即 CSI 后跟一个或两个参数,后跟~
。第一个参数是功能键编号。第二个参数指示活动修改键状态。
就DECFNK而言,最多可以有20个功能键。功能键 1 至 20 的 DECFNK 代码已明确定义并记录在案。毕竟,LK 键盘上实际上有 20 个功能键。 (即使有几个功能键通常没有,他们可以潜在地都生成 DECFNK 序列,并且序列位于 DEC doco 中。)这是用于 DEC VT420 的 LK401 键盘:
正如您在表中所看到的,生成原始 DECFNK 序列的模拟器为这 20 个键发出 DECFNK 11 到 DECFNK 34。 (一些 DECFNK 数字被跳过。有趣的是,被跳过的数字对应于键盘上功能键行的按键组之间的物理空间。)
事情变得复杂的是 PC 和 XENIX 的引入。在 IBM PC(特别是 PC 3270)领域,F 型键盘上有 24 个功能键。 PC/AT 的增强型键盘有 12 个功能键,只有一半。这是 3270 F 型键盘:
终端仿真惯例出现了,可以通过使用修饰符的组合从 PC/AT 键盘访问从F13到 的功能键。通过和F24的四种组合,⎈ Control⇧ Level 2 Shift仅仅增强型键盘上的12个功能键可以模拟48个功能键。 XENIX 控制台就是这种情况,它生成 48 个不同的控制序列。
您将在该表的其他列中观察到正在发生的情况。 (比如说) F6、F18、F30和的控制序列F42都是 DECFNK 17,第二个参数中的修饰符位标志具有不同的值。
另请注意,在同一列中, F1toF5不是 DECFNK 控制序列。这又取决于 PC 键盘上的模拟器约定。在 DEC LK 键盘上F1,F5 做过已分配 DECFNK 序列并且可以生成它们,但通常在“本地”模式下运行,其中它们不生成到主机的输入。模拟器不需要生成这些 DECFNK 序列并模拟F1到F5,因为很少甚至没有应用程序依赖这些密钥;但模拟器则相反做过需要在实际的 DEC 键盘中模拟计算器键盘上的一组PF1按键PF4,但 PC 键盘没有。 这些键不会生成 DECFNK 序列,并且不是真正的功能键。他们生成 SS3 控制序列,就像其他计算器键一样。
(某些 SS3 序列格式错误。“SS”代表“单移”,此类移位适用于单个后续字符。将修饰符参数附加到 SS3 的 XTerm 控制序列实际上不是正确形成的 SS3 序列。真正的 DEC 终端计算器按键控制序列没有报告修饰符。)
这解释了为模拟终端设置的功能键控制序列如何高达 48 个功能键。要解释 64 个控制序列,只需注意 DECFNK 序列中的修饰符参数即可。对于附加的 12 个控制序列,它是3
,表示⎇ Alt修饰符。
事实上,⎈ Control、⇧ Level 2 Shift、 和共有 8 种可能的组合⎇ Alt; DEC VT 控制序列协议识别的三个修饰符。因此,根据这些终端仿真器约定,PC/AT 增强型键盘可以有 96 个不同的 DECFNK 控制序列,而 DEC LK 键盘可以有 160 个不同的 DECFNK 控制序列。
进一步阅读
答案2
xterm 实际上支持的远不止64功能键(通过转移,控制,替代,元修饰符)。这64恰好是 terminfo 中定义的可移植集(以及X/开放诅咒)。该集合中的第一个是kf0
(这会让人感到困惑,所以很少使用)。
它这样做是因为人们希望能够区分各种按键组合(并非每个人都是 emacs 用户,但这有帮助)。在不发明一套全新的 terminfo 功能的情况下,扩展 xterm 以使用可用的预定义 64 个 terminfo 名称是一个足够好的解决方案。
与 ncurses'用户自定义键,xterm 终端描述不止于此,但仍小于实际限制。将组合相乘,对于 PC 键盘的 12 个键,即 8*12 或 16*12,具体取决于您的配置是否相等替代和元。
同一组修饰符适用于 4 个光标键和 6 个编辑键。
修饰符依次可以是修改的(给予不同的套转义序列)。 xterm 中的各种构建块术语信息来源说明了这些(例如xterm+pcf0,xterm+pcf1等),增加了可能性。
但没人数...
顺便说一句,默认情况下,真正的 VT220 不会对前 5 个功能键执行任何操作(有用)。但那是另一回事了。
对于 PC 来说,使用 Shift/Control/Alt 进行修饰符已经很旧了。 ncurses 有一些终端描述操作系统/2使用这种方法,以及上合组织(相同的硬件)。
答案3
它与旧的 DEC ascii 终端有关,例如 VT220。
http://www.columbia.edu/kermit/k95vtfk.html
功能键用于与大型计算机上运行的基于文本的程序进行交互。
终端和主机之间的连接通常是串行的。
按 F 键会使终端传输一系列 ASCII 代码,通常以 ESC 字符开头。
F 键类似于现代计算机使用中的热键。
例如,F1 可以是在屏幕上显示菜单的键。
Shift 和 Control 键与 F 键的组合将生成 F21-F64
例如,按 Shift-F1 即可生成 F21。 (可能是 ctrl-F1)F61 类似于 ctrl-shft-F1