在 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.mzph.cn/news/716157.shtml

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

相关文章

CleanMyMac X2024测评深度分析与功能全面介绍

一、软件概述 CleanMyMac X 是一款强大的Mac清理和优化工具&#xff0c;它可以帮助用户轻松管理和释放Mac上的空间&#xff0c;优化系统性能&#xff0c;提高运行速度。这款软件以其直观的用户界面和丰富的功能受到了广大Mac用户的欢迎。 CleanMyMac X4.14.6全新版下载如下: …

令牌桶算法和漏桶算法各自的应用场景

令牌桶算法和漏桶算法都是流量控制算法&#xff0c;它们在网络和系统中有着不同的应用场景&#xff0c;具体如下&#xff1a; 令牌桶算法的应用场景&#xff1a; 网络流量控制&#xff1a; 令牌桶算法广泛应用于网络流量控制中&#xff0c;特别是在网络设备中&#xff0c;如路…

html基础标签+Http请求

文章目录 目录 文章目录 前言 一.网址组成 二.HTTP协议解析 Http 请求报文 报文请求方法 报文头 Cache-Control 常见缓存控制行为 cookie 解析 Http 响应报文 常见状态码 三.域名解析(DNS) DNS域名服务器分类 递归查询 迭代查询 四.端口号 五.路径信息 六.Https协议 ​对称…

第一篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas库

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、主要特点和功能介绍二、Series 示例代码三、DataFrame示例代码四、数据导入/导出示例代码五、数据清洗示例代码六、数据选择和过滤示例代码七、数据合并和连接示例代码八、数据分组和聚…

Linux系统管理:虚拟机 Kali Linux 安装

目录 一、理论 1.Kali Linux 二、实验 1.虚拟机Kali Linux安装准备阶段 2.安装Kali Linux 2. Kali Linux 更换国内源 3. Kali Linux 设置固定IP 4. Kali Linux 开启SSH远程连接 5. MobaXterm远程连接 Kali Linux 三、问题 1.apt 命令 取代哪些 apt-get命令 一、理论…

《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记1

传统的3D场景理解方法依赖于带标签的3D数据集,用于训练一个模型以进行单一任务的监督学习。我们提出了OpenScene,一种替代方法,其中模型在CLIP特征空间中预测与文本和图像像素共同嵌入的3D场景点的密集特征。这种零样本方法实现了与任务无关的训练和开放词汇查询。例如,为了…

Phoncent博客:探索AI写作与编程的无限可能

Phoncent博客&#xff0c;一个名为Phoncent的创新AIGC博客网站&#xff0c;于2023年诞生。它的创始人是庄泽峰&#xff0c;一个自媒体人和个人站长&#xff0c;他在网络营销推广领域有着丰富的经验。庄泽峰深知人工智能技术在内容创作和编程领域的潜力和创造力&#xff0c;因此…

有趣的CSS - 闪烁的鸿星尔克文字招牌效果

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是利用 animation 动画实现一个闪烁的霓虹灯文字效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html…

第十一届蓝桥杯省赛第二场C++ B组 / C组《成绩统计》(c++)

1.题目说明 小蓝给学生们组织了一场考试&#xff0c;卷面总分为100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分&#xff0c;则称为及格。 如果得分至少为 85 分&#xff0c;则称为优秀。 请计算及格率和优秀率&#xff0c;用百分数表示…

使用Spark探索数据

需求分析 使用Spark来探索数据是一种高效处理大规模数据的方法&#xff0c;需要对数据进行加载、清洗和转换&#xff0c;选择合适的Spark组件进行数据处理和分析。需求分析包括确定数据分析的目的和问题、选择合适的Spark应用程序和算法、优化数据处理流程和性能、可视化和解释…

【嵌入式实践】【芝麻】【设计篇-3】从0到1给电动车添加指纹锁:项目整体规划

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

Pycharm下如何生成exe软件

第一步 下载pyinstaller pip install pyinstaller 对pyinstaller第二步 使用pyinstaller cmd切换到项目目录执行命令:pyinstaller --add-data “./templates;templates” 入口文件名.py

【语音识别】- 几个主流模型

文章目录 1. Wav2Vec 2.02. Whisper2. WeNet1. Wav2Vec 2.0 由Facebook AI Research(FAIR)于2020年提出的在语音方向里具有一定影响力的预训练模型。 论文地址:https://arxiv.org/pdf/2006.11477.pdf 项目地址:https://github.com/pytorch/fairseq 训练数据:62万小时未…

基于Mahout实现K-Means聚类

需求分析 需要对数据集进行预处理&#xff0c;选择合适的特征进行聚类分析&#xff0c;确定聚类的数量和初始中心点&#xff0c;调用Mahout提供的K-Means算法进行聚类计算&#xff0c;评估聚类结果的准确性和稳定性。同时&#xff0c;需要对Mahout的使用和参数调优进行深入学习…

顶会ICLR2024论文Time-LLM:基于大语言模型的时间序列预测

文青松 松鼠AI首席科学家、AI研究院负责人 美国佐治亚理工学院(Georgia Tech)电子与计算机工程博士&#xff0c;人工智能、决策智能和信号处理方向专家&#xff0c;在松鼠AI、阿里、Marvell等公司超10年的技术和管理经验&#xff0c;近100篇文章发表在人工智能相关的顶会与顶刊…

Cloud整合Zookeeper代替Eureka

微服务间通信重构与服务治理笔记-CSDN博客 Zookeeper是一个分布式协调工具,可以实现注册中心功能 安装Zookeeper 随便 就用最新版本吧 进入Zookeeper 包目录 cd /usr/local/develop/ 解压 tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local/develop 进入配置文件…

uniapp 获取页面来源

获取当前页面栈的实例&#xff0c;以数组形式按栈的顺序给出&#xff0c;数组中的元素为页面实例&#xff0c;第一个元素为首页&#xff0c;最后一个元素为当前页面。 let pages getCurrentPages(); if (pages.length > 1) { // 若页面栈长度大于1则表示不止一个页面被打开…

在 JavaScript 中用 var, let, 以及 const 有什么差别?什么时候该用哪个?

「在 JavaScript 中用 var, let, 以及 const 有什么差别?」是在前端、JavaScript 面试中常见的考题。在面试时可以先大方向地列点说出异同之处,然后再针对每一个点进行深入说明。以下是以第一人称撰写的参考拟答。 var, let, 以及 const 都是在 JavaScript 用来做变数宣告的…

前端导入导出

1、将后端excel二进制文件导出excel下载 import { read, utils, writeFileXLSX } from "xlsx";const useExportExcel (excelData: string, fileName: string) > {const wb read(excelData);const ws wb.Sheets[wb.SheetNames[0]];// 从工作表生成数据行const …

Android 将图片网址url转化为bitmap

1. 图片网址url转化为bitmap 1.1. 方法一 通过 HttpURLConnection 请求 要使用一个线程去访问&#xff0c;因为是网络请求&#xff0c;这是一个一步请求&#xff0c;不能直接返回获取&#xff0c;要不然永远为null&#xff0c;在这里得到BitMap之后记得使用Hanlder或者EventBu…