终端打印控制

printf("\033[1;33m Hello World. \033[0m \n");
颜色如下:
none         = "\033[0m"
black        = "\033[0;30m"
dark_gray    = "\033[1;30m"
blue         = "\033[0;34m"
light_blue   = "\033[1;34m"
green        = "\033[0;32m"
light_green -= "\033[1;32m"
cyan         = "\033[0;36m"
light_cyan   = "\033[1;36m"
red          = "\033[0;31m"
light_red    = "\033[1;31m"
purple       = "\033[0;35m"
light_purple = "\033[1;35m"
brown        = "\033[0;33m"
yellow       = "\033[1;33m"
light_gray   = "\033[0;37m"
white        = "\033[1;37m"
 
字背景颜色范围: 40--49                   字颜色: 30--39
        40: 黑                          30: 黑
        41:红                          31: 红
        42:绿                          32: 绿
        43:黄                          33: 黄
        44:蓝                          34: 蓝
        45:紫                          35: 紫
        46:深绿                        36: 深绿
        47:白色                        37: 白色
 
输出特效格式控制:
 
\033[0m  关闭所有属性  
\033[1m   设置高亮度  
\03[4m   下划线  
\033[5m   闪烁  
\033[7m   反显  
\033[8m   消隐  
\033[30m   --   \033[37m   设置前景色  
\033[40m   --   \033[47m   设置背景色
 
 
光标位置等的格式控制:
 
\033[nA  光标上移n行  
\03[nB   光标下移n行  
\033[nC   光标右移n行  
\033[nD   光标左移n行  
\033[y;xH设置光标位置  
\033[2J   清屏  
\033[K   清除从光标到行尾的内容  
\033[s   保存光标位置  
\033[u   恢复光标位置  
\033[?25l   隐藏光标  
\33[?25h   显示光标


Ctrl L   0x0C,   Ctrl U   0x15,   



终端下不换行刷新当前行

终端下耗时较长的程序运行过程中输出中间状态时,有时信息太多,希望一些次要的信息能被覆盖掉,整体显得干净一些。

以往我用"\r"字符,控制输出的光标回到行首,再次输出覆盖上一行的信息,只要输出不换行,且下次输出的行长度不短于上一次,看起啦就是最后一行不断地在刷新。

但是如果下一次的输出长度不确定,甚至因接口限制而必须换行时,这种方式就不行了。

玩过BBS的都知道,ANSI定义了一套终端控制转义字符,可以更精细地控制屏幕输出,比如颜色,光标位置等。查阅ANSI转义代码表

CSI n K   EL – Erase in Line,当n==2时,清除当前行。

CSI n F    CPL – Cursor Previous Line,光标上移一行。

CSI为ESC字符,也就是八进制的\033或者\x1E字符,再跟一个左大括号。

所以,如果能够不换行,只需要输出\r\033[2K字符,就能实现清除当前行并光标回到行首。

如果字符串输出时,输出接口会自动加上一个换行的话,那就用CSI F回到上一行即可。

最终,我用这种方式实现了,在Blade中,编译源代码的状态信息自动刷新,削减了3/4的滚屏。

发布了138 篇原创文章 · 获赞 80 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/u012308586/article/details/105462039
今日推荐