在 Ubuntu 终端输出不同颜色、粗体、下划线或其他样式的字体

嗯。调试时总发现自己打印的调试信息太过普通、单调,于是乎……

Notice

要在终端实现字体的特殊样式,通常通过使用特殊的控制字符来实现,而不是通过某语言本身的功能来实现。
在大多数终端中,可以使用 ANSI 转义序列来设置字体的颜色。ANSI 转义序列是一系列以 ESC 开头的字符,用于控制文本终端的属性,包括颜色、格式和光标位置等。ANSI 转义序列以 \033[ 开头,后跟属性代码,以设置不同的终端属性。
请注意,不同的终端可能对 ANSI 转义序列的支持程度不同。大多数 Unix/Linux 终端和 Windows 上的一些控制台仿真器(如 ConEmu、Cygwin 和 Windows Terminal)都支持 ANSI 转义序列。

Color

包括前景色和背景色。前景色指的是字体本身的颜色,背景色指的是字体的背景颜色。
一些常见颜色:黑色、红色、绿色、黄色、蓝色、洋红色、青色、白色。
先来看一下效果:
在这里插入图片描述

#define

见名知意,不再赘述。

#define ANSI_COLOR_RESET   "\x1b[0m"		// 重置#define ANSI_COLOR_BLACK   "\033[30m"		// 前景色
#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_WHITE   "\033[37m"#define ANSI_BG_BLACK       "\x1b[40m"		// 背景色
#define ANSI_BG_RED         "\x1b[41m"
#define ANSI_BG_GREEN       "\x1b[42m"
#define ANSI_BG_YELLOW      "\x1b[43m"
#define ANSI_BG_BLUE        "\x1b[44m"
#define ANSI_BG_MAGENTA     "\x1b[45m"
#define ANSI_BG_CYAN        "\x1b[46m"
#define ANSI_BG_WHITE       "\x1b[47m"#define ANSI_COLOR_BRIGHT_BLACK   "\x1b[90m"		// 前景亮色
#define ANSI_COLOR_BRIGHT_RED     "\x1b[91m"
#define ANSI_COLOR_BRIGHT_GREEN   "\x1b[92m"
#define ANSI_COLOR_BRIGHT_YELLOW  "\x1b[93m"
#define ANSI_COLOR_BRIGHT_BLUE    "\x1b[94m"
#define ANSI_COLOR_BRIGHT_MAGENTA "\x1b[95m"
#define ANSI_COLOR_BRIGHT_CYAN    "\x1b[96m"
#define ANSI_COLOR_BRIGHT_WHITE   "\x1b[97m"#define ANSI_BG_BRIGHT_BLACK       "\x1b[100m"		// 背景亮色
#define ANSI_BG_BRIGHT_RED         "\x1b[101m"
#define ANSI_BG_BRIGHT_GREEN       "\x1b[102m"
#define ANSI_BG_BRIGHT_YELLOW      "\x1b[103m"
#define ANSI_BG_BRIGHT_BLUE        "\x1b[104m"
#define ANSI_BG_BRIGHT_MAGENTA     "\x1b[105m"
#define ANSI_BG_BRIGHT_CYAN        "\x1b[106m"
#define ANSI_BG_BRIGHT_WHITE       "\x1b[107m"

Example

#include <iostream>// 有的宏定义没有用到,但懒得删掉了 ×_×#define ANSI_COLOR_BLACK   "\033[30m"
#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_WHITE   "\033[37m"#define ANSI_COLOR_RESET   "\x1b[0m"#define ANSI_BG_BLACK       "\x1b[40m"
#define ANSI_BG_RED         "\x1b[41m"
#define ANSI_BG_GREEN       "\x1b[42m"
#define ANSI_BG_YELLOW      "\x1b[43m"
#define ANSI_BG_BLUE        "\x1b[44m"
#define ANSI_BG_MAGENTA     "\x1b[45m"
#define ANSI_BG_CYAN        "\x1b[46m"
#define ANSI_BG_WHITE       "\x1b[47m"#define ANSI_COLOR_BRIGHT_RED     "\x1b[91m"
#define ANSI_COLOR_BRIGHT_GREEN   "\x1b[92m"
#define ANSI_COLOR_BRIGHT_YELLOW  "\x1b[93m"
#define ANSI_COLOR_BRIGHT_BLUE    "\x1b[94m"
#define ANSI_COLOR_BRIGHT_MAGENTA "\x1b[95m"
#define ANSI_COLOR_BRIGHT_CYAN    "\x1b[96m"
#define ANSI_COLOR_BRIGHT_WHITE   "\x1b[97m"#define ANSI_BG_BRIGHT_BLACK      "\x1b[100m"int main() {std::cout << "\033[31mThis text will be red. \033[0m" << std::endl;std::cout << "\x1b[33mThis text will be yellow. \033[0m" << std::endl;std::cout << ANSI_COLOR_RED << ANSI_BG_YELLOW << "Hello, world!" << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_BG_GREEN << ANSI_BG_MAGENTA << "¡Hola, mundo!" << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_BG_YELLOW << ANSI_BG_CYAN << "Hallo, welt!" << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_BRIGHT_BLUE << "Your future will be bright!" << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_BLUE << "Your future will be bright!" << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_WHITE << "This is white. " << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_BRIGHT_WHITE << "This is bright white. " << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_WHITE << ANSI_BG_BRIGHT_BLACK << "BrightBlack. " << ANSI_COLOR_RESET << std::endl;std::cout << ANSI_COLOR_WHITE << ANSI_BG_BLACK << "Black. " << ANSI_COLOR_RESET << std::endl;return 0;
}

outcome

实现效果如下:
在这里插入图片描述

ROS_INFO

那么如何使用 ROS_INFO 来输出彩色字体呢?

	// 创建一个字符串流std::stringstream ss;// 向字符串流中添加需要的信息和 ANSI 转义序列ss << "\x1b[31m\x1b[43m" << "Hello, world!" << "\x1b[0m";// 使用 ROS_INFO 输出字符串流中的内容ROS_INFO("%s", ss.str().c_str());

以上代码来自 GPT。但保险起见,在向流中添加信息和转义序列时,尤其需要反复使用同一字符串流时,最好先执行以下操作:

ss.str("");

Bold & Underline

在这里插入图片描述

#define

见名知意,不再赘述。

#define ANSI_BOLD_ON        "\x1b[1m"
#define ANSI_BOLD_OFF       "\x1b[22m"#define ANSI_UNDERLINE_ON   "\x1b[4m"
#define ANSI_UNDERLINE_OFF  "\x1b[24m"#define ANSI_COLOR_RESET    "\x1b[0m"

Example

#include <iostream>// ANSI 转义序列,用于设置字体加粗和取消加粗
#define ANSI_BOLD_ON      "\x1b[1m"
#define ANSI_BOLD_OFF     "\x1b[22m"// ANSI 转义序列,用于设置下划线和取消下划线
#define ANSI_UNDERLINE_ON   "\x1b[4m"
#define ANSI_UNDERLINE_OFF  "\x1b[24m"// ANSI 转义序列,用于重置终端颜色
#define ANSI_COLOR_RESET    "\x1b[0m"int main() {// 输出加粗文字std::cout << ANSI_BOLD_ON << "Bold Text" << ANSI_COLOR_RESET << std::endl;// 输出带下划线的文字std::cout << ANSI_UNDERLINE_ON << "Underlined Text" << ANSI_COLOR_RESET << std::endl;return 0;
}

outcome

实现效果如下:
在这里插入图片描述

ROS_INFO

同上。

Other styles

在这里插入图片描述

#define

见名知意,不再赘述。

#define ANSI_BLINK_ON       "\x1b[5m"   // 开启闪烁
#define ANSI_BLINK_OFF      "\x1b[25m"  // 关闭闪烁#define ANSI_REVERSE_ON     "\x1b[7m"   // 开启反显
#define ANSI_REVERSE_OFF    "\x1b[27m"  // 关闭反显#define ANSI_HIDDEN_ON      "\x1b[8m"   // 开启隐藏
#define ANSI_HIDDEN_OFF     "\x1b[28m"  // 关闭隐藏#define ANSI_STRIKETHROUGH  "\x1b[9m"   // 开启删除线
#define ANSI_STRIKETHROUGH  "\x1b[99m"  // 关闭删除线#define ANSI_RESET          "\x1b[0m"

Example

#include <iostream>// ANSI 转义序列,用于设置终端效果
#define ANSI_BLINK_ON       "\x1b[5m"   // 开启闪烁
#define ANSI_BLINK_OFF      "\x1b[25m"  // 关闭闪烁
#define ANSI_REVERSE_ON     "\x1b[7m"   // 开启反显
#define ANSI_REVERSE_OFF    "\x1b[27m"  // 关闭反显
#define ANSI_HIDDEN_ON      "\x1b[8m"   // 开启隐藏
#define ANSI_HIDDEN_OFF     "\x1b[28m"  // 关闭隐藏
#define ANSI_STRIKETHROUGH  "\x1b[9m"   // 开启删除线// ANSI 转义序列,用于重置终端效果
#define ANSI_RESET          "\x1b[0m"int main() {// 闪烁效果std::cout << ANSI_BLINK_ON << "Blinking Text" << ANSI_RESET << std::endl;std::cout << ANSI_BLINK_OFF << "No Blinking Text" << ANSI_RESET << std::endl;// 反显效果std::cout << ANSI_REVERSE_ON << "Reversed Text" << ANSI_RESET << std::endl;std::cout << ANSI_REVERSE_OFF << "No Reversed Text" << ANSI_RESET << std::endl;// 隐藏效果std::cout << ANSI_HIDDEN_ON << "Hidden Text" << ANSI_RESET << std::endl;std::cout << ANSI_HIDDEN_OFF << "No Hidden Text" << ANSI_RESET << std::endl;// 删除线效果std::cout << ANSI_STRIKETHROUGH << "Strikethrough Text" << ANSI_RESET << std::endl;return 0;
}

outcome

实现效果如下:
在这里插入图片描述
在这里插入图片描述

ROS_INFO

#include <ros/ros.h>
#include <sstream>// 自定义的打印函数,用于在ROS_INFO中使用特定标记实现效果
void customInfo(const std::string& message) {std::cout << message << std::endl;
}int main(int argc, char** argv) {ros::init(argc, argv, "example_node");ros::NodeHandle nh;// 创建一个字符串流std::stringstream ss;// 向字符串流中添加需要的信息,并使用特定标记来表示效果ss << "[blink]Hello, world![/blink] ";ss << "[reverse]Reversed Text[/reverse] ";ss << "[hidden]Hidden Text[/hidden] ";ss << "[strikethrough]Strikethrough Text[/strikethrough]";// 使用自定义的打印函数打印信息customInfo(ss.str());ros::spin();return 0;
}

Combination

以上(并不互相冲突的)诸多效果可组合使用。略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505991.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bulingbuling - 《历史的教训》 [ The Lessons of History ]

《历史的教训》 两位当代最伟大思想家的著名论文集&#xff0c;汇集了 5000 多年的历史 作者&#xff1a;威尔-杜兰特和阿里尔-杜兰特 The Lessons of History The celebrated collection of essays compiling over 5,000 years of history by two of the greatest thinkers …

一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验

没想到作为使用电脑多年的老司机也会电脑中病毒&#xff0c;周末玩电脑的时候突然电脑很卡&#xff0c;然后自动重启&#xff0c;奇怪&#xff0c;之前没出现这个情况。 重启后电脑开机等了几十秒&#xff0c;打开任务管理器查看开机进程&#xff0c;果然发现有个Synaptics Po…

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

制作镜像与配置推送阿里云仓库

一、制作jdk镜像 1.1、Alpine linux简介 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简洁和高效。它采用了musl libc和BusyBox&#xff0c;使得系统资源占用较少&#xff0c;启动速度较快。 Alpine Linux也提供了一个简单的包管理工具APK&#xff0c;(注…

电子电气架构——AUTOSAR架构下EcuM唤醒源事件详解

电子电气架构——AUTOSAR架构下EcuM唤醒源事件详解 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人…

蓝桥杯倒计时 43天 - 前缀和

思路&#xff1a;如果用n^2复杂度暴力会超时。nlogn 可以&#xff0c;利用前缀和化简&#xff0c;提前存储某个位置前的每个石头搬运到该位置和每个石头后搬运到该位置的前缀和On最后直接输出 On。排序花 nlogn #include<bits/stdc.h> using namespace std; typedef pai…

使用C语言 打印出所有的水仙花数

水仙花数 一.什么是水仙花数二.如何获取一个数的每一位数三.如何计算一个数有几位数四.计算出所有的水仙花数 一.什么是水仙花数 水仙花数的定义&#xff1a;“水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&#xff0c;如:153&#xff1d;1^ 3&a…

(C语言)回调函数

回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…

H12-821_108

108.路由器R1和R2分别使用GigabitEthernet0/0/0直连&#xff0c;并试图建立OSFP邻居&#xff0c;然而邻居关系并没有成功建立&#xff0c;排错过程如图所示。那么以下哪一个操作可以使R1和R2邻居管理正常建立&#xff1f; A. [R2] ospf 1 [R2-ospf-1]area 0 [R2-ospf-1-area-0.…

mamba-ssm安装building wheel卡着不动后error...避坑解决方法

文章目录 方法1、下载whl文件到本地后pip install安装成功后验证&#xff1a; 方法2、拉取Docker镜像 对于项目中用到MambaIR的小伙伴&#xff0c;需要pip安装 causal_conv1d和 mamba-ssm两个包及其依赖&#xff1a; torch packing transformersMambaIR-Github主页&#xff0…

从下一代车规MCU厘清存储器的发展(2)

目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章&#xff0c;我们简述了当前主流的存储器技术&#xff0c;现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…

上位机图像处理和嵌入式模块部署(上、下位机通信的三个注意点)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果最终部署在客户现场的是一个嵌入式设备&#xff0c;那么上位机在做好了算法编辑和算法部署之后&#xff0c;很重要的一步就是处理上位机和下位…