终端中的Shift +方向键的历史是什么?


21

我不知道为什么 Shift+ Arrow Key结果中的一个ABCD字母。

为什么没有其他字母?为什么根本没有字母?


有趣的:D我的赌注?与基于文本的游戏有关:D
Rinzwind

2
只是观察:在tty Shift + Arrow Keys中什么也没做。
RaduRădeanu13年

@Rinzwind::)))
RaduRădeanu13年

1
我在Unix / Linux Stack Exchange上问了这个问题。有一些有用的答案。也许您想看看他们。unix.stackexchange.com/questions/73669/...
yfklon

Answers:


27

终端仿真器,如gnome-terminal(“终端”在Ubuntu),而且xtermurxvt因为它们再现了旧的终端经电脑的唯一显示器的行为被命名为“模拟器”。这样的终端通过基于文本的协议与计算机通信,并且最初被设计为仅接收文本。很快,需要更多的控制权:如何删除一行?使用颜色?还是更改光标位置?

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

为每个终端设计了转义序列以执行此类操作。它们之所以被命名为escape,是因为它们以ASCII逸出代码开头33。无法直接打印此类字符,这使其非常适合此类序列。当我们仍要显示此字符时,^[[将使用它,这就是我将在解释中使用的内容。

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

DEC VT-52维修手册1976年

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

仍然是终端仿真器今天的工作方式:取决于$TERM变量,一个名为的数据库terminfo负责说明应将哪些代码发送到外壳(bash,sh,zsh ...),然后由该外壳负责理解它们并做出反应给他们。

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


5
哇有趣。现在,^[[A当我在终端上运行进程时单击箭头键时,所有这些设置才有意义。
2013年

4
您可以在按SHIFT-UpArrow之前按CTRL-v以原始格式“查看”转义序列。除非您更改了默认设置,否则ESC应该在您的终端屏幕上显示为^ [
arielf 2013年

@arielf您还可以运行cat >/dev/null然后键入,完成后按Ctrl + C(或Enter然后Ctrl + D)。
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.