在 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.pswp.cn/news/716157.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716157.shtml
英文地址,請注明出處:http://en.pswp.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…