读:ASCII control characters in my terminal

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

本文讨论了33个ASCII控制字符及其功能,特别是Ctrl键组合的作用和处理方式。控制字符分为OS终端驱动、readline库和应用程序自定义三类。文章还探讨了不同模式下的输入处理、Backspace键的历史混乱以及Ctrl-S的流控制问题。

🎯

关键要点

  • 文章讨论了33个ASCII控制字符及其功能,特别是Ctrl键组合的作用和处理方式。
  • 控制字符分为三类:OS终端驱动、readline库和应用程序自定义。
  • OS终端驱动直接处理的控制码包括Ctrl-C(终止程序)、Ctrl-Z(挂起程序)、Ctrl-D(发送EOF)。
  • readline库处理的控制码包括Ctrl-W(删一个词)、Ctrl-U(删整行)、Ctrl-R(搜索历史命令)。
  • 应用程序可以自定义控制码,例如Emacs使用Ctrl-X作为快捷键前缀。
  • Ctrl-M和Ctrl-I的字节值与Enter和Tab相同,导致它们在终端程序中效果一致。
  • 终端的输入处理模式分为规范模式和原始模式,影响Ctrl-W和Ctrl-U的行为。
  • Backspace键的行为不统一,有些机器发送byte 127,有些发送byte 8,可能导致删除字符的异常。
  • Ctrl-S用于软件流控制,发送byte 19,导致输出暂停,现代使用中几乎不再需要。
  • ASCII控制码的正式名称与其在终端中的实际功能不符,建议忽略这些名称。

延伸问答

ASCII控制字符有哪些主要功能?

ASCII控制字符主要用于控制终端的输入和输出,包括终止程序、挂起程序、删除字符等功能。

如何区分OS终端驱动、readline库和应用程序自定义的控制字符?

OS终端驱动直接处理的控制字符如Ctrl-C和Ctrl-Z,readline库处理的如Ctrl-W和Ctrl-U,而应用程序自定义的控制字符则由特定应用定义,如Emacs的Ctrl-X。

Ctrl-M和Ctrl-I在终端中有什么作用?

Ctrl-M和Ctrl-I的字节值分别与Enter和Tab相同,因此在终端中它们的效果与按下Enter和Tab键一致。

什么是规范模式和原始模式?

规范模式下,OS终端驱动负责行编辑,输入在按Enter后才被程序看到;原始模式下,程序立即接收到每个按键,需自行处理输入。

Backspace键的行为为何不统一?

Backspace键的行为不统一是因为不同机器可能发送不同的字节(byte 127或byte 8),导致在某些程序中表现异常。

Ctrl-S的流控制功能在现代使用中还有必要吗?

在现代使用中,Ctrl-S的流控制功能几乎不再需要,用户可以通过关闭软件流控制来避免其干扰。

➡️

继续阅读