我终端中的ASCII控制字符

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

本文探讨了33个终端控制代码,如Ctrl-A和Ctrl-C,分为操作系统处理和应用程序处理两类。文章回顾了这些代码的历史、使用方式及在不同模式下的表现,并强调在编写终端应用时应避免使用某些快捷键。作者提供了一个Python脚本用于识别控制代码,指出这些知识虽有趣但并非必需。

🎯

关键要点

  • 本文探讨了33个终端控制代码,如Ctrl-A和Ctrl-C,分为操作系统处理和应用程序处理两类。

  • 文章回顾了这些控制代码的历史、使用方式及在不同模式下的表现。

  • 作者强调在编写终端应用时应避免使用某些快捷键,如Ctrl-I和Ctrl-M。

  • 提供了一个Python脚本用于识别控制代码,指出这些知识虽有趣但并非必需。

  • 控制代码分为操作系统处理和应用程序处理,操作系统处理的代码会发送信号给当前程序。

  • 文章指出,只有33个控制代码,且某些组合键在终端应用中并无实际意义。

  • ASCII控制代码的名称与其在现代系统中的功能关系不大,很多名称已不再适用。

  • 在规范模式和非规范模式下,某些控制代码的处理方式不同。

  • 作者提到可以使用stty工具重新映射操作系统终端驱动的代码。

  • 不同程序可能会对相同的控制代码有不同的处理方式,导致冲突。

  • 关于Backspace键的处理存在历史争议,不同系统可能有不同的配置。

  • 作者认为这些知识虽然有趣,但并非使用终端的必要条件。

🔎

延伸解读

终端控制代码的分类与处理

文章将33个ASCII控制代码分为操作系统处理和应用程序处理两类。操作系统处理的代码直接影响当前程序的行为,如Ctrl-C发送SIGINT信号,而应用程序处理的代码则由应用程序自行定义。这种分类有助于理解不同代码在终端中的作用及其潜在冲突。

快捷键使用的注意事项

在编写终端应用时,作者建议避免使用Ctrl-I和Ctrl-M作为快捷键,因为它们分别与Tab和Enter功能相同,可能导致用户混淆。此外,某些组合键在不同终端模拟器中的表现也可能不同,开发者需谨慎选择以避免功能冲突。

控制代码的历史与现代意义

虽然ASCII控制代码的名称源于电报机时代,但在现代终端中,其功能与名称的关系已不再紧密。许多代码在当今系统中的实际用途与其原始定义相去甚远,因此了解这些代码的历史背景有助于更好地理解其在当前环境中的应用。

延伸问答

终端控制代码有哪些分类?

终端控制代码分为操作系统处理和应用程序处理两类。

为什么在编写终端应用时应避免使用Ctrl-I和Ctrl-M?

因为Ctrl-I和Ctrl-M分别与Tab和Enter相同,使用它们作为快捷键会造成混淆。

如何识别终端发送的控制代码?

可以使用一个Python脚本来识别控制代码,作者提供了一个名为echo-key.py的示例。

ASCII控制代码的历史背景是什么?

这些控制代码最初是为电报机定义的,许多名称与现代系统中的功能关系不大。

在规范模式和非规范模式下,控制代码的处理有什么不同?

在规范模式下,输入仅在按下Enter时被程序接收,而在非规范模式下,输入会立即被程序接收。

使用stty工具可以做什么?

stty工具可以重新映射操作系统终端驱动的控制代码,并查看当前的映射。

🏷️

标签

➡️

继续阅读