终端特殊字符实现清屏和颜色控制等操作
在使用node.js编写命令行工具的时候,想要写一个命令行的工具条,然后需要对当前行进行清除操作,在反复查阅资料后发现,在终端内进行清屏等操作可以利用向终端输出特殊字符来实现。
颜色控制
以node.js为例,在终端中输出有颜色的文字的方式如下:
// 此行代码将在控制台输出黄色的Hello World.
// 行首的 \033[1;33m 是将后续输出文字的颜色修改为黄色
// 行尾的 \033[0m 是在输出完之后讲文字颜色回复正常,以免影响后面的内容
process.stdout.write("\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
|||
特殊效果设置
|代码|对 应格式|代码|对应格式|
|--|--|--|--|
|\033[0m
| 关闭所有属性 | \033[1m
| 设置高亮度 |
|\03[4m
| 下划线 | \033[5m
| 闪烁 |
|\033[7m
| 反显 | \033[8m
| 消隐 |
|\033[30m
-- \033[37m
| 设置前景色 | |
|\033[40m
-- \033[47m
| 设置背景色 ||
前景色和背景色的取值范围表:
|前景|背景|颜色| |--|--|--| |30|40| 黑色| |31|41| 紅色| |32|42| 綠色| |33|43| 黃色| |34|44| 藍色| |35|45| 紫紅色| |36|46| 青藍色| |37|47| 白色|
清屏等操作
在终端中进行清屏等操作,可以直接向终端输出如下的特殊代码即可。
// 下面这行代码即可实现清屏效果
process.stdout.write('\033[2J')
// 下面这行代码可以将光标置于屏幕的左上角
process.stdout.write('\033[0;0f');
// 如果要清除当前行内容则可以将光标移动到指定的行首,然后清除当前行内容即可
process.stdout.write('\033[0;0f');
process.stdout.write('\033[K');
// 由于我要实现的是一个进度条效果,所以代码如下,用到了保存和恢复光标位置
setInterval(function() {
process.stdout.write("\033[K"); // 清除当前行内容
process.stdout.write("\033[s"); // 保存光标位置
process.stdout.write(thisProgressBar.update(count++, 100)); // 更新进度条信息
process.stdout.write("\033[u"); // 恢复光标位r
}, 1000);
|字符|功能|字符|功能|
|--|--|--|--|
|\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`| 显示光标|||