终端格式控制

53 篇文章 0 订阅

转自: http://blog.csdn.net/htttw/article/details/7483274


终端格式控制


今天我们介绍如何改变终端的输出格式,包括前景色,背景色等。



先给出如下语句:
  1. printf("\033[31mI am red!\n");  

其中的\033[31m表示将终端的前景色改成红色,因此会看到如下结果:



由于我们最后没有恢复默认设置,因此程序执行完后命令提示符也变成红色的了。




有如下的一些格式:
\033[0m     关闭所有属性
\033[1m     设置高亮度
\033[4m     下划线
\033[5m     闪烁
\033[7m     反显
\033[8m     消隐
\033[30m   至 \33[37m 设置前景色
\033[40m   至 \33[47m 设置背景色
\033[nA     光标上移n行 
\033[nB     光标下移n行
\033[nC     光标右移n行
\033[nD     光标左移n行
\033[y;xH  设置光标位置
\033[2J      清屏
\033[K       清除从光标到行尾的内容
\033[s        保存光标位置 
\033[u        恢复光标位置
\033[?25l   隐藏光标
\033[?25h  显示光标



其中前景色有如下一些:
30:  黑
31:  红
32:  绿
33:  黄
34:  蓝
35:  紫
36:  青 
37:  白



其中背景色有如下一些:
40:  黑
41:  红
42:  绿
43:  黄
44:  蓝
45:  紫
46:  青
47:  白



另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:
  1. printf("\033[10;1H\033[1;4;32mHello,world\033[0m");  
这行命令首先\033[10;1H将光标移动到终端第10行第1列,之后的\033[1;4;32m将文本属性设置为高亮(1m)、带下划线(4m)且颜色为绿色(32m),然后输出Hello,world;最后\033[0m将终端属性恢复为默认值,这样就不会看到连程序执行完后命令提示符也变了样儿了。




下面是一个比较综合的例子:

Makefile:

  1. all: color.c  
  2.     gcc -Wall -o color color.c  
  3.   
  4. clean:  
  5.     rm -rf *.o color  


color.c:

  1. #include <unistd.h>  
  2. #include <stdio.h>  
  3.   
  4. int main()  
  5. {  
  6.   /* 设置高亮度 */  
  7.   printf("\033[1m Hightlight!\n");  
  8.   
  9.   /* 下划线 */  
  10.   printf("\033[4m Underline!\n");  
  11.   
  12.   /* 关闭所有属性 */  
  13.   printf("\033[0m");  
  14.   
  15.   /* 反显 */  
  16.   printf("\033[7m 反显!\n");  
  17.   
  18.   /* 关闭所有属性 */  
  19.   printf("\033[0m");  
  20.   
  21.   /* 设置前景色 \033[30m 至 \33[37m */  
  22.   printf("\033[30m fore color");  
  23.   printf("\033[31m fore color");  
  24.   printf("\033[32m fore color");  
  25.   printf("\033[33m fore color");  
  26.   printf("\033[34m fore color");  
  27.   printf("\033[35m fore color");  
  28.   printf("\033[36m fore color");  
  29.   printf("\033[37m fore color\n");  
  30.   
  31.   /* 关闭所有属性 */  
  32.   printf("\033[0m");  
  33.   
  34.   /* 设置背景色 \033[40m 至 \33[47m */  
  35.   printf("\033[40m back color");  
  36.   printf("\033[41m back color");  
  37.   printf("\033[42m back color");  
  38.   printf("\033[43m back color");  
  39.   printf("\033[44m back color");  
  40.   printf("\033[45m back color");  
  41.   printf("\033[46m back color");  
  42.   printf("\033[47m back color\n");  
  43.   
  44.   /* 关闭所有属性 */  
  45.   printf("\033[0m");  
  46.   
  47.   /* 光标右移20行 */  
  48.   printf("\033[20C");  
  49.   
  50.   /* 光标下移2行 */  
  51.   printf("\033[2B i am here!\n");  
  52.   
  53.   /* 也可以组合使用 */  
  54.   printf ("\033[31mIt's ok!\033[0m");  
  55.   printf("\033[10;20H\033[1;4;32mIt's also ok!\033[0m");  
  56.   
  57.   /* 隐藏光标 */  
  58.   printf("\033[?25l where is the cursor???\n");  
  59.   sleep(5);  
  60.   
  61.   /* 显示光标 */  
  62.   printf("\033[?25h i am here!\n");  
  63.   sleep(5);     
  64.   
  65.   /* 关闭所有属性 */  
  66.   printf("\033[0m");  
  67.   
  68.   return 0;  
  69. }  



程序的最后一部分先隐藏光标5秒,然后再显示光标,最后退出。

结果:





另外,除了编程控制终端外,我们还可以直接用shell来控制,如下:





echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释


完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值