当前位置: 首页>>技术教程>>正文


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

问题描述

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

为什么不是其他字母?为什么要写信?

最佳办法

诸如 gnome-terminal(Ubuntu 中的 “Terminal”)之类的终端仿真器以及 xtermurxvt 都被命名为 “emulators”,因为它们再现了旧终端的行为,而旧终端是计算机的唯一显示器。此类终端使用基于文本的协议与计算机通信,最初设计为仅接收文本。很快,需要更多控制:如何擦除一条线?使用颜色?或者改变光标位置?

\n来源:The Art of Unix Usability – Command-Line Interfaces

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

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

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

这仍然是终端模拟器今天的工作方式:根据 $TERM 变量,名为 terminfo 的数据库负责说明应该将哪些代码发送到 shell(bash、sh、zsh…),然后由后者负责理解它们并对他们做出反应。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13045.html,未经允许,请勿转载。