如何美化linux终端输出

我以前写过一篇文章Linux C/C++ 如何输出彩色字体
点击链接即可传送
这里我再加两个常用的控制字符\n\r
有人会问,这两个不久换行符嘛,有什么好讲的。其实不然。

系统终端换行符
Windows\r\n
Linux\n
Mac OS\r

有人又会问,不对呀,我在C/C++中都用\n作换行符的,怎么没报错?其实编译器作了特殊优化。
那么\r\n到底有什么区别呢?
\r代表光标移动到行首,\n代表光标向下移动
看到这里,我想大家也明白了,Windows的换行符是最标准的
先将光标移动至行首,再下移一行
但我的重点不是换行符,而是\r
有的人可能知道退格符\b,意思是把光标倒退一格
这个控制字符在一些情况下十分有用,比如vim八成是这么干的,但如果要显示进度条,怎么退到行首呢?
这个时候,\r登场了。终端对输出的处理是覆盖本行后面的字符(如果有的话)
于是只要新的输出大于等于原来的输出,就可以做到更新进度条。
std::cout << "Hello world!\rThis is a new sentence!" << std::endl;
这句话输出很明显,应该是This is a new sentence!
但如果换一个,std::cout << "Hello world!\rHello!" << std::endl;
你会发现,输出不是Hello!而是Hello!world!
因为终端不会把本行的所有字符都删除,而是用类似Insert的模式去输出。
那么这个时候,打开Linux C/C++ 如何输出彩色字体,找到\033[K这一行,这个控制字符串就可以帮助你删除本行光标后的内容,可以配合\r使用(仅限于Linux,对于其他操作系统,会将那一串全部输出)
到这里,进度条已经可以实现了。但是我在测试的时候发现了问题,因为更新过于频繁,会导致光标不断在那一行闪动,影响视觉效果。这个时候,再次点击传送门,发现控制字符串\033[?25l可以隐藏光标,而控制字符串\033[25h可以重新显示。这就非常好了,只要在输出的开始时隐藏光标,在结束时显示光标就行了。
那么至此,你结合表格(传送门内),就可以实现apt的进度条了(Progress那个只需要在输出开始先光标下移\n,在输出结束光标上移\033[1A就行了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值