每天进步一点点: 终端也可以色彩斑斓

in #cn7 years ago

昨天的帖子,学习了如何让Python程序原地刷新。实现原地刷新以后我又冒出了个新想法,有没有办法让输出的内容带一些颜色呢,这样看起来是不是会更舒服一些呢。


(图源 :pixabay)

简单例子

查了一下果然和上篇文章中用到的回车、换行、退格一样,色彩功能也是用ASCII码\e配合其它控制内容实现的。试了一下属实很好玩,但是具体使用方法有点晕,乱乱的找不到头绪。

比如这行代码:
echo -e 'This is a \033[1;35m test \033[0m!'
可以在终端显示这样的文本:
但是你能看懂代码都是啥意思吗?总之我是看不懂。

作为一个喜欢刨根问底儿的人,有看不懂的代码,如果行数很多也就罢了,这才一行代码,怎么能忍得了。必须搞懂啊,于是一通查资料,比如维基百科上的这篇文章:ANSI escape code

详细解释

通过学习这篇ANSI escape code,我们可以理解上述代码了。

\033就是ESC啦,也可以用\e来表示。
\033[表示要开始操作啦
后边可以接几组设置内容,每组内容用;分割,用m结束
然后中间放要显示的文本
最后用\033[0m恢复默认设置

这样在读上述代码,是不是就没有障碍了?
根据ANSI escape code说明,我们可以自由发挥一下,加入更多的设置元素。

比如:echo -e "Normal \e[1;4;33;46mI am oflyhigh! \e[0m"

额,要把颜色调得好看一些,还真是个难题呢!

网上一些文章,写着设置格式:
开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
这个呢,说正确也正确,因为你按照这个格式设置,不会出啥错;说不正确呢,也不正确,因为显示方式;前景色;背景色这里并没有顺序要求。
比如这段代码:echo -e "Normal \e[33;46;1;4mI am oflyhigh! \e[0m"
和之前的代码,显示结果是一样一样的。

设置部分,可以参考ANSI escape codeSGR (Select Graphic Rendition) parameters部分。
颜色选择,可以参考ANSI escape codeColors部分。

简单的颜色选择,可以使用下表中元素:

比如我们之前示例代码中就使用了这个表中的前景色和背景色。

除此之外,还有更复杂的颜色选择方式:

ESC[ … 38;5;<n>… m Select foreground color
ESC[ … 48;5;<n> … m Select background color
0- 7: standard colors (as in ESC [ 30–37 m)
8- 15: high intensity colors (as in ESC [ 90–97 m)
16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
232-255: grayscale from black to white in 24 steps

例如:echo -e "Normal \e[38;5;9mI am oflyhigh! \e[0m"

又例如:echo -e "Normal \e[48;5;8mI am oflyhigh! \e[0m"

至于24位色,我在putty里试着没成功,可能和putty模拟的终端类型有关,也可能是我代码使用的不对。

其它

除了颜色以外,还有一些其它功能,比如说控制光标。

这样一来,可比我们上篇文章用\r\b,来控制光标位置高级多了。因为这篇主要讲色彩,就不再此处啰嗦了,回头单独开贴学习。

结论

通过学习ANSI escape code,发现给终端输出的文本设置颜色是一件很简单也很有趣的事情。

但是呢,如何用设置颜色功能设置出来漂亮的颜色,还真是门大学问呢,至少对于我这种审美观奇差的人是相当有难度的啦。

另外,终端设置颜色啥的,终究是小道,人家现在都玩GUI、玩网页,字符界面一般都很少被使用了。不过了解一下也挺好玩的,至少我以前不知道字符界面这么强大呢。

相关链接

Sort:  

好棒!

直接 oh-my-zsh 不好嘛……

搜索了一下oh-my-zsh,又见识了一个强大的东东,感谢
不过尽管它很强大,但是和我文中想要的东西还是不太一致
比如说我想一段实现输出一段花花绿绿的内容,不清楚你说的oh-my-zsh如何实现

另外,我也是初学者,不知道的东西太多啦:)

推荐学习一下这本书: conquering the command line, 免费的, 对终端的操作有很大帮助...

谢谢,回头了解一下
不过其实我就是随便玩玩😀

有辦法設定成特殊指令自動變色嗎?話說我覺得自己的terminal滿帥的,條透明就很好看了,跟家分享一下。剩下有些指令希望可以自動變色 xD

额,我也不太懂
或者你可以参考 @momok 提到的 oh-my-zsh

Great post,i like your posts very much.

nice one, lovely colours using in programming

Thanks a lot for sharing your valuable post....
Carry on next
Best of luck..
I will still wait for your next post....

Is the best

your art so nice thanks for sharing.

Coin Marketplace

STEEM 0.21
TRX 0.25
JST 0.038
BTC 95634.12
ETH 3333.35
USDT 1.00
SBD 3.08