多字节转义序列的最大长度是多少?

多字节转义序列的最大长度是多少?
  • ESC发送\x1b.那是1字节:实际的转义字符。

  • Page Up发送\x1b[H.那是3字节

  • F2发送\x1b[OQ.那是4字节

  • F5发送\x1b[15~.那是5字节

其中之一的最大长度是多少?这有记录在某处吗?

答案1

没有预定义的长度限制控制序列。 OP 给出了一些发送的字符串作为示例特殊键,记录在XTerm 控制序列

xterm 以可能的键代码列表开始,可以添加修饰符代码,如Alt 和 Meta 键部分。没有长度表。这样做的一个复杂之处在于,有多种资源设置一起工作,可以做出数千种可能的键盘排列。 xterm 终端描述不是描述所有这些,而是​​作为一组 terminfo 构建块(名称带有“+”)呈现,包括用户定义的功能修改的键(例如,controlshift等)。

  • xterm 的 terminfo页面列出了这些(由脚本生成)。
  • 构建块的大小受到限制,以适应大多数实现假定的已编译 terminfo 的 4096 字节限制。
  • 恩诅咒终端数据库列出了这些构建块的子集。
  • 它还记录了用户定义的能力xterm 条目使用的 es,注意到可能的键比记录的要多得多。

其他一些终端实现 xterm 方案,但仅适用于特定组合。所以这些会更容易列举。从某种意义上说,它们是“预先定义的”。

然而,特殊键并不是控制序列的唯一类型。这些使用 ECMA-48 格式的终端均接受从主机发送的控制序列。一般来说,它们接受数字或字符串参数:

  • xterm 忽略大于 65535 的数字,因此您可以将其视为对数量的限制数字(但取决于终端)。
  • 控制序列可以包括任意数量的数字参数。例如,xterm 接受一个控制序列,该序列会更改 256 色调色板中的 256 种颜色中的每一种颜色。这是几千字节(可以估计上限)。控制序列解析器在任何时候都不需要多个数字。
  • 字符串参数(例如设置窗口的标题)的长度没有预定义的限制。

同样,其他终端仿真器可以对它们接受的控制序列的长度使用它们自己的限制。

相关内容