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

cat*_*cat 5 escape-characters

  • ESC发送\x1b. 那是1 个字节:实际的转义字符。

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

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

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

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

Tho*_*key 7

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

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

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

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

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

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

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