Las*_*ssi 5 terminal keyboard xterm
根据这个终端模拟器及其键码表,新版本的 XTerm 可以识别从 F1、F2、F3 到 F63 的功能键。大多数键盘只有 F1..F12 范围内的物理功能键。额外键的目的是什么?是否存在从物理键或鼠标按下到这些功能键编号的(半)标准映射,如果没有,它们是如何触发的?
我的印象是,在传统的终端用语中,所有特殊键,包括方向键、home/end 等都称为功能键(而我们这些在 PC 上长大的人只会认为 F1..F12 是功能键键)。但是,XTerm 还单独讨论了这些命名键(例如kUP,该表中的向上箭头键)。
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,Model F 键盘上有 24 个功能键。PC/AT 的增强型键盘有 12 个功能键,只有一半。这是一个 3270 Model F 键盘:

出现了终端仿真约定,即可以通过使用修饰符的组合从 PC/AT 键盘访问从F13到的功能键F24。用的四种组合⎈ Control和⇧ Level 2 Shift,则仅仅可以由一个增强型键盘上的12个功能键,以模拟48个的功能键。XENIX 控制台就是这种情况,它生成了 48 个不同的控制序列。
您将在该表的其他列中观察到正在发生的情况。(比如说)F6、F18、F30和的控制序列F42都是 DECFNK 17,第二个参数中的修饰符位标志的值不同。
还要注意F1toF5不是那些相同列中的 DECFNK 控制序列。这再次归结为 PC 键盘上的模拟器约定。在 DEC LK 键盘上,F1toF5 确实分配了 DECFNK 序列并可以生成它们,但通常在“本地”模式下运行,在这种模式下它们不会向主机生成输入。仿真器不需要生成这些 DECFNK 序列并模拟F1到F5,因为结果很少或没有应用程序依赖于这些密钥;但相反,模拟器确实需要模拟实际 DEC 键盘中计算器键盘上的一组PF1toPF4键,而 PC 键盘没有。 这些键不会生成 DECFNK 序列,也不是真正的功能键。他们生成 SS3 控制序列,就像其他计算器键一样。
(某些 SS3 序列格式错误。“SS”代表“Single Shift”,此类转换适用于单个后续字符。将修饰符参数附加到 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 控制序列。
它与旧的 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