读:ASCII control characters in my terminal
内容提要
本文讨论了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控制字符分为三类:OS终端驱动、readline库和应用程序自定义。了解这些分类有助于开发者在编写终端应用时,选择合适的控制字符以实现预期功能。特别是在使用readline库的程序中,某些控制字符的行为可能与非交互式程序不同,需特别注意。
Backspace键的行为差异
Backspace键在不同系统中可能发送不同的字节(byte 127或byte 8),这会导致在某些程序中表现不一致。用户在遇到Backspace键无法正常删除字符时,可以通过stty命令调整设置,以确保其行为符合预期。
流控制的现代意义
Ctrl-S用于软件流控制,虽然在过去的低速终端中非常实用,但在现代使用中几乎不再需要。开发者应考虑关闭此功能,以避免影响其他快捷键的使用,特别是在需要频繁使用历史命令搜索的场景中。
延伸问答
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的流控制功能几乎不再需要,用户可以通过关闭软件流控制来避免其干扰。