浅析 \x1B[1;3;31mxterm.js\x1B[0m 是什么?如何在终端输出带颜色等格式的字符串 您所在的位置:网站首页 忍3带颜色的签名 浅析 \x1B[1;3;31mxterm.js\x1B[0m 是什么?如何在终端输出带颜色等格式的字符串

浅析 \x1B[1;3;31mxterm.js\x1B[0m 是什么?如何在终端输出带颜色等格式的字符串

2024-01-20 03:05| 来源: 网络整理| 查看: 265

  我在写 xterm.js demo 的时候碰到 \x1B[1;3;31mxterm.js\x1B[0m 这个,不知道是什么,但是界面展示是红色的斜体的 xterm.js 所以了解一下这个东西。

一、ANSI 转义码

  如果可以在 terminal 上面印出各中颜色的字符串,可以方便与迅速定位到关键信息。

  使用定义颜色的 ANSI 转义码。格式如下:

\x1b[(文字装饰);(颜色代码):

1、文字装饰

0143 正常 加粗 下划线 背景

2、颜色代码

基本8色基本高对比色xterm 的 256 色 30 ~ 37 90 ~ 97 0 ~ 256

3、其它更多的颜色可以参考:ANSI escape code

二、如何在终端输出带颜色等格式的字符串

  看别人的开源项目的时候发现,原来在终端可以打印带颜色的字符串的,只需要在待打印的字符串前面和后面分别加一串修饰字符就行了。下面是C语言的一个例子:

#include #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YELLOW "\x1b[33m" #define ANSI_COLOR_BLUE "\x1b[34m" #define ANSI_COLOR_MAGENTA "\x1b[35m" #define ANSI_COLOR_CYAN "\x1b[36m" #define ANSI_COLOR_RESET "\x1b[0m" int main() { printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n"); return 0; }

  在终端的运行结果如下图所示:

  然后在我的项目使用,这样如下:

三、shell或C语言下的实现方法

  我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言。

1、shell 下实现

  先来讲在shell下,如何实现。用echo命令就可以实现,参看以下例子: echo  -e  "\033[32mHello, world!"

  当你在终端里敲下这条命令后,是不是发现系统用绿色输出了"Hello,world!",不止如此,连之后的命令提示符都变成了绿色?不要着急,听我继续说。

  echo 命令 -e 选项的作用是激活终端对反斜线转义符(即 \ )的解释。引号内 \033 用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后边的 [32m 就是将前景色设置为绿色,字母 m 表示设置的属性类别,数字代表属性值。设置可以单独使用,例如:echo -e  "\033[0m",这行命令的作用是恢复属性为默认值,也就是说 0m 设置项用于恢复默认值。现在你的终端是不是又一切正常了?

  理解了这些,剩下的就简单了。用这种命令,除了设置文本前景色,还可以设置很多属性。下边列出其他的设置项:

\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 显示光标

  各数字所代表的颜色如下:

字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30-----------39 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色

  另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"

  这行命令首先 \033[20;1H 将光标移动到终端第20行第1列,之后的\033[1;4;32m将文本属性设置为高亮、带下划线且颜色为绿色,然后输出Hello,world;最后 \033[0m 将终端属性恢复为默认值,这样就不会看到连命令完成后的命令提示符也变了样儿了。

  通过以上各种命令的组合就可以实现对终端输出地复杂控制。

2、C 编程下的实现

      理解了以上在Shell中的实现方法,关于在C中如何实现就很简单了。可以说只需要用printf函数代替上边的echo -e就OK了。参见下例:

int color = 32; printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);

      这个例子类似上边shell中最后那个例子,只是这里颜色值通过变量color来指定(当然,也可以直接指定)。

3、在其他编程语言里也可以用类似的方法实现对终端输出的控制,比如 js 里

term.writeln("Welcome to \x1b[1;32m墨天轮\x1b[0m.") term.writeln('This is Web Terminal of Modb; Good Good Study, Day Day Up.')

  输出效果就是我们上面看到的截图效果。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有