ANSI设备驱动器
这个是在《C/C++程序员实用大全·精华版:C/C++最佳编程指南》一书中提到了"ANSI设备驱动器"。
要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。要直接在 shell 里面输入转义序列我们需要先按 ctrl-v:CTRL-v ESC。
转义序列 | 功能 | 示例 |
Esc[x;yH | 把光标放置在x行y列上 | Esc[10;25H |
Esc[xA | 上移光标x行 | Esc[1A |
Esc[xB | 下移光标x行 | Esc[2B |
Esc[yC | 右移光标y列 | Esc[10C |
Esc[yD | 左移光标y列 | Esc[10D |
Esc[S | 存储光标当前的位置 | Esc[S |
Esc[U | 恢复光标位置 | Esc[U |
Esc[2J | 清屏,将光标移至起始位置 | Esc[2J |
Esc[K | 清除至行尾 | Esc[K |
C 语言示例
用绿色打印"Hello Word":
#include <stdio.h> int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0; } |
另外一个有用的转义序列是 printf("\033[2J"),它和 system(clear) 完成的功能一样。但是可以不需要头文件 unistd.h。
使用printf("\033[1K") 可以删除一行。