终端的图形API是什么?

dep*_*ted 8 terminal text-user-interface

某些程序如何设置背景和字体颜色,将字符写入屏幕上的同一位置(例如第三行,第五列)不止一次?

一些示例是 显示的进度条curl google.com > a、一些安装屏幕和几乎任何文本编辑器。

Bor*_*nov 7

你在寻找像ncurses这样的东西吗?

  • 这些天,你会想要*新*诅咒,或[`ncurses`](http://en.wikipedia.org/wiki/Ncurses)。 (3认同)

bah*_*mat 5

您要问的并不是真正的图形 API,而是终端控制字符。

它背后有很多历史,但当时的终端是电传打字机。基本上是一台带有轨道进纸的打字机,通过串行连接连接到计算机。键入一个字符会将二进制值发送到计算机(以及在页面上键入它)。计算机会将字符打印回作为您请求的任何输出。

特殊字符用于控制终端(这是控制键的来源,用于生成这些字符)。例如,^H或者^?是退格,^M是回车(将光标移动到行首)和^J换行(将页面向上移动一行)。一些控制代码在 C 中有一个转义序列(几乎所有编程语言都共享)来生成控制字符。前面列出的控制可能是\b\r\n分别。

您今天使用的终端仿真器听起来就是这样,它是一种伪装成旧电传打字机的软件。从某种意义上说,这几乎就像 Unix 仍然认为您正在使用打字机与它进行通信。

在 的情况下curl,它写入一整行然后发送\r(回车)将光标带到该行的开头,然后写入另一行。由于没有发送换行符,它会一直在屏幕上的同一行上书写。

您可以尝试证明这一点:

echo -n  "First" ; sleep 5 ; echo -en "\rSecond\n"
Run Code Online (Sandbox Code Playgroud)

您将看到打印出“First”字样(但不会发送新行)。5 秒后,它将被替换为单词“Second”并发送一个新行。您可以无限期地重复此模式。尝试自己添加“第三个”,您会看到一些您可能没想到的东西 ;-)

有关这些和其他控制字符的更多信息,请参阅ascii(7)手册。