终端中 Shift + 箭头键的历史是什么?

终端中 Shift + 箭头键的历史是什么?

我想知道为什么 Shift+会导致、或字母Arrow Key之一。ABCD

为什么不是其他字母?为什么是任何字母?

答案1

终端仿真器(例如gnome-terminalUbuntu 中的“终端”)也xtermurxvt称为“仿真器”,因为它们重现了旧终端的行为,旧终端是计算机的唯一显示器。此类终端使用基于文本的协议与计算机通信,最初设计为仅接收文本。很快,需要更多控制:如何擦除一行?使用颜色?或者更改光标位置?

VT-100 终端 来源:Unix 可用性艺术 - 命令行界面

转义序列是为每个终端设计用来做这些事情的。它们被命名为逃脱因为它们以 ASCII 转义码开头:33。没有办法直接打印这样的字符,这使得它非常适合这样的序列。当我们仍然想显示这个字符时,^[[使用 ,这就是我将在我的解释中使用的。

当终端收到 时^[[A,它并不意味着“打印 ^[[A”,而是“用户按下了向上箭头键”。这里的“A”完全是任意的:它恰好是每个人都同意的字母,因为这是 DEC VT-52 及其后继流行的 VT-100 终端所使用的。

DEC VT-52 维护手册 1976 年

来源:DEC VT-52 维护手册 1976

如今,终端仿真器仍采用这样的工作方式:根据变量$TERM,一个名为的数据库terminfo负责说明应向 shell 发送哪些代码(bash、sh、zsh……),然后 shell 负责理解这些代码并对它们做出反应。

Shift现在, +的代码up恰好是^[[1;2A:终端仿真器将此代码发送到 shell,shell 会尝试解释^[[1;2但不显示任何内容,因为它不知道该转义序列。但A会保留并显示。

相关内容