前幾天熬夜寫庫,追求極簡語法、快速上手、豐富功能、跨平臺支持,下面,請看~
TC.hpp - ? 跨平臺終端控制頭文件庫
?? 一個現代化的 C++17 終端控制庫,旨在用最簡單的語法解決開發過程中會遇到的各種問題。目前功能包括終端彩色輸出、延時、進度條、基礎控制、系統信息檢測、獲取時間等,跨平臺、零依賴、純頭文件!
? 主要特性
- ??? 跨平臺:Windows/類Unix終端自動適配
- ?? 豐富色彩:支持前景色、背景色、RGB、字體樣式
- ?? 現代C++17,純頭文件,零依賴
- ?? 延時與打字機特效
- ?? 進度條、鏈式API、終端尺寸/光標控制
- ?? 代碼風格簡潔,易于集成
?? 快速上手
1. 引入頭文件
#include "tc.hpp"
2. 主要用法示例
#include "tc.hpp"
int main() {
// ?? 顏色與樣式
tc::tout << TCOLOR_GREEN << "Hello world!" << TCOLOR_RESET << std::endl;
tc::tout << TFONT_BOLD << "粗體文本" << TFONT_RESET << std::endl;
tc::tout << TCOLOR_RGB(255,0,0) << "RGB紅" << TCOLOR_RESET << std::endl;
std::cout << tc::red("紅色文本") << std::endl;
// ?? 延時輸出
tc::tout << "Wait..." << std::endl;
tc::tsleep(1000);
tc::tout << "Done!" << std::endl;
// ??? Python風格打印
tc::print("Hello ", "world!\n");
tc::println("年齡: ", 25, ", 分數: ", 95.5);
tc::println(TCOLOR_RED, "紅色文本");
tc::println(TCOLOR_GREEN, BCOLOR_YELLOW, "綠色文字,黃色背景");
tc::println(TCOLOR_BLUE, BCOLOR_WHITE, TFONT_BOLD, "藍色粗體,白色背景");
// ??? Printer鏈式API
tc::printer()
.clear() // 清屏
.moveCursor(10,5)
.print("移動光標到(10,5)")
.hideCursor() // 隱藏光標
.moveCursor(tc::Printer::Direction::Down, 2) // 相對移動(向下2行)
.println("在(10,7)")
.println() // 換行
.showCursor(); // 顯示光標
// ?? 終端尺寸
auto size = tc::printer().getSize();
tc::println("終端大小: ", size.first, "x", size.second);
// ? 進度條
tc::ProgressBar bar(30, "█", "?", TCOLOR_GREEN);
for (int i = 0; i <= 100; ++i) {
bar.show(i / 100.0, "處理中...");
tc::wait(0.02);
}
bar.finish();
// ??? 執行系統命令
tc::systemConsole("echo TC systemConsole test");
// ?? 獲取系統時間
int year = tc::getSystemTime(SYS_YEAR);
int month = tc::getSystemTime(SYS_MONTH);
int day = tc::getSystemTime(SYS_DAY);
int hour = tc::getSystemTime(SYS_HOUR);
int minute = tc::getSystemTime(SYS_MINUTE);
int second = tc::getSystemTime(SYS_SECOND);
int timestamp = tc::getSystemTime(); // 默認Unix時間戳
tc::println("當前時間: ", year, "-", month, "-", day, " ", hour, ":", minute, ":", second, " (Unix: ", timestamp, ")");
// ??? 檢查系統環境
int os = tc::systemCheck();
const char* osName = tc::getOSName(os);
std::string osVersionInfo = tc::getOSVersionInfo();
tc::println("當前系統: ", osName);
tc::println("系統版本: ", osVersionInfo);
return 0;
}
?? 主要API與宏
?? 顏色與樣式
全局顏色宏(直接用)
// 前景色
TCOLOR_RED, TCOLOR_GREEN, TCOLOR_YELLOW, TCOLOR_BLUE, TCOLOR_MAGENTA, TCOLOR_CYAN, TCOLOR_WHITE, TCOLOR_RESET
// 背景色
BCOLOR_RED, BCOLOR_GREEN, BCOLOR_YELLOW, BCOLOR_BLUE, BCOLOR_MAGENTA, BCOLOR_CYAN, BCOLOR_WHITE, BCOLOR_DEFAULT
// 字體樣式
TFONT_BOLD, TFONT_FAINT, TFONT_ITALIC, TFONT_UNDERLINE, TFONT_BLINK_SLOW, TFONT_BLINK_FAST, TFONT_REVERSE, TFONT_CONCEAL, TFONT_CROSSED, TFONT_DEFAULT, TFONT_FRAKTUR, TFONT_DOUBLE_UNDERLINE, TFONT_NORMAL, TFONT_NOT_ITALIC, TFONT_NO_UNDERLINE, TFONT_NO_BLINK, TFONT_NO_REVERSE, TFONT_REVEAL, TFONT_NOT_CROSSED, TFONT_THICK, TFONT_RESET
// RGB
TCOLOR_RGB(r, g, b)
顏色控制類(ColorController)
// 設置顏色
tc::ColorController::setColor(tc::ColorController::Color::RED);
std::cout << "紅色文本" << std::endl;
// 設置RGB顏色
tc::ColorController::setRGBColor(255, 128, 0);
std::cout << "橙色文本" << std::endl;
// 設置粗體
tc::ColorController::setBold(true);
std::cout << "粗體文本" << std::endl;
// 重置顏色
tc::ColorController::setColor(tc::ColorController::Color::RESET);
便捷顏色函數
? 注意:便捷顏色函數本質上是在字符串頭尾添加 ANSI 轉義序列,最好不要在輸出上濫用,并且部分終端不支持 ANSI 轉移序列。想要做文本帶顏色輸出,推薦移步其它方法。
// 基本顏色函數
std::string coloredText = tc::colorize("彩色文本", tc::ColorController::Color::CYAN);
std::cout << coloredText << std::endl;
// RGB顏色函數
std::string rgbText = tc::colorizeRGB("RGB顏色文本", 255, 128, 0);
std::cout << rgbText << std::endl;
// 標準顏色函數
std::cout << tc::red("紅色文本") << std::endl;
std::cout << tc::green("綠色文本") << std::endl;
std::cout << tc::blue("藍色文本") << std::endl;
std::cout << tc::yellow("黃色文本") << std::endl;
std::cout << tc::cyan("青色文本") << std::endl;
std::cout << tc::magenta("洋紅色文本") << std::endl;
std::cout << tc::white("白色文本") << std::endl;
// 亮色函數
std::cout << tc::brightRed("亮紅色文本") << std::endl;
std::cout << tc::brightGreen("亮綠色文本") << std::endl;
std::cout << tc::brightBlue("亮藍色文本") << std::endl;
std::cout << tc::brightYellow("亮黃色文本") << std::endl;
字體樣式宏(TFONT_XXX)
| 宏名 | 效果 | 兼容性說明 |
|---|---|---|
| TFONT_BOLD | 粗體/加粗 | 所有平臺完全支持 |
| TFONT_FAINT | 微弱/淡色 | Windows完全支持,其他終端部分支持 |
| TFONT_ITALIC | 斜體 | Windows完全支持,其他終端部分支持 |
| TFONT_UNDERLINE | 下劃線 | 所有平臺完全支持 |
| TFONT_BLINK_SLOW | 慢速閃爍 | Windows完全支持,其他終端部分支持 |
| TFONT_BLINK_FAST | 快速閃爍 | Windows完全支持,其他終端很少支持 |
| TFONT_REVERSE | 反色 | 所有平臺完全支持 |
| TFONT_CONCEAL | 隱藏 | Windows完全支持,其他終端很少支持 |
| TFONT_CROSSED | 刪除線 | Windows完全支持,其他終端部分支持 |
| TFONT_DEFAULT | 默認字體 | Windows完全支持,其他終端很少支持 |
| TFONT_FRAKTUR | Fraktur字體 | Windows完全支持,其他終端極少支持 |
| TFONT_DOUBLE_UNDERLINE | 雙下劃線/粗體關閉 | Windows完全支持,其他終端部分支持 |
| TFONT_NORMAL | 粗體/淡色關閉 | 所有平臺完全支持 |
| TFONT_NOT_ITALIC | 關閉斜體/Fraktur | Windows完全支持,其他終端部分支持 |
| TFONT_NO_UNDERLINE | 關閉下劃線 | 所有平臺完全支持 |
| TFONT_NO_BLINK | 關閉閃爍 | Windows完全支持,其他終端很少支持 |
| TFONT_NO_REVERSE | 關閉反色 | 所有平臺完全支持 |
| TFONT_REVEAL | 關閉隱藏 | Windows完全支持,其他終端很少支持 |
| TFONT_NOT_CROSSED | 關閉刪除線 | Windows完全支持,其他終端部分支持 |
| TFONT_THICK | 粗體(別名) | 同TFONT_BOLD |
| TFONT_RESET | 全部重置 | 所有平臺完全支持 |
?? 兼容性說明:
- TC.hpp 在 Windows 平臺上使用 Windows Console API(Win32 API)實現終端控制功能,而不使用 ANSI 轉義序列,因此所有字體樣式在 Windows 平臺上都能完全支持,不受終端對 ANSI 轉義序列支持程度的限制。
- Linux/macOS 下使用 ANSI 轉義序列實現,主流終端(如 GNOME Terminal、iTerm2、Konsole、Alacritty 等)大多支持常用樣式(粗體、下劃線、反色、部分斜體/刪除線)。
- TFONT_FRAKTUR、TFONT_DEFAULT、TFONT_DOUBLE_UNDERLINE 等為擴展/實驗性樣式,在非 Windows 平臺上支持度較低。
用法示例:tc::println(TCOLOR_RED, BCOLOR_YELLOW, TFONT_BOLD, "紅字黃底粗體")
??? 終端控制
tc::terminal命名空間
// 清空屏幕
tc::terminal::clear();
// 移動光標到指定位置
tc::terminal::moveCursor(10, 5);
std::cout << "這是位置(10,5)" << std::endl;
// 獲取終端大小
auto [width, height] = tc::terminal::getSize();
std::cout << "終端大小: " << width << "x" << height << std::endl;
tc::Printer鏈式類
// 創建Printer對象并執行一系列操作
tc::printer()
.clear() // 清屏
.hideCursor() // 隱藏光標
.moveCursor(10, 5) // 移動到絕對位置
.println("這是位置(10,5)") // 打印并換行
.moveCursor(tc::Printer::Direction::Down, 2) // 相對移動(向下2行)
.println("向下移動了2行")
.moveCursor(1, 10) // 移動到第10行開頭
.print("在第10行: ") // 打印不換行
.print("繼續在同一行打印")
.println() // 換行
.showCursor(); // 顯示光標
?? 輸出與打印
tc::tout:流式輸出(支持顏色/樣式/延時)tc::print(...)/tc::println(...):多參數打印,支持顏色/樣式宏
?? 延時與等待
tc::tsleep(ms)/tc::tsleep_stream << mstc::wait(seconds)tc::waitKey()
?? 進度條
tc::ProgressBar bar(width, doneChar, todoChar, color)bar.show(progress, msg)bar.finish()
??? 系統相關API
tc::getSystemTime(int type = SYS_TIMESTAMP):獲取當前時間(年、月、日、時、分、秒、Unix時間戳)tc::systemConsole(const char* 或 std::string):執行系統命令tc::systemConsoleW(const wchar_t*):執行系統命令(寬字符版本,僅Windows平臺可用,支持Unicode命令)tc::systemCheck():檢測當前操作系統,返回操作系統代碼tc::getOSName(int osCode):根據操作系統代碼返回操作系統名稱tc::getOSVersionInfo():獲取當前操作系統的詳細版本信息
支持的系統宏
| 類別 | 宏名 | 說明 |
|---|---|---|
| Windows系列 | OS_WINDOWS | 通用Windows標識 |
| OS_WINDOWSNT6 | Windows 7/8/8.1 (NT 6.x) | |
| OS_WINDOWSNT10 | Windows 10 (NT 10.0) | |
| OS_WINDOWSNT11 | Windows 11 (NT 10.0 build 22000+) | |
| Linux發行版 | OS_LINUX | 通用Linux標識 |
| OS_UBUNTU | Ubuntu Linux | |
| OS_DEBIAN | Debian Linux | |
| OS_FEDORA | Fedora Linux | |
| OS_CENTOS | CentOS Linux | |
| OS_REDHAT | Red Hat Enterprise Linux | |
| OS_SUSE | SUSE/openSUSE Linux | |
| OS_ARCH | Arch Linux | |
| OS_GENTOO | Gentoo Linux | |
| OS_SLACKWARE | Slackware Linux | |
| OS_ANDROID | Android (基于Linux) | |
| OS_KALI | Kali Linux | |
| OS_MINT | Linux Mint | |
| OS_MANJARO | Manjaro Linux | |
| OS_ALPINE | Alpine Linux | |
| OS_RASPBIAN | Raspbian | |
| OS_DEEPIN | Deepin Linux | |
| OS_ELEMENTARY | Elementary OS | |
| OS_ZORIN | Zorin OS | |
| OS_POPOS | Pop!_OS | |
| OS_CHROMEOS | Chrome OS/Chromium OS | |
| Apple操作系統 | OS_MACOS | 通用macOS標識 |
| OS_MACOS_HIGHSIERRA | macOS 10.13 High Sierra (2017) | |
| OS_MACOS_MOJAVE | macOS 10.14 Mojave (2018) | |
| OS_MACOS_CATALINA | macOS 10.15 Catalina (2019) | |
| OS_MACOS_BIGSUR | macOS 11 Big Sur (2020) | |
| OS_MACOS_MONTEREY | macOS 12 Monterey (2021) | |
| OS_MACOS_VENTURA | macOS 13 Ventura (2022) | |
| OS_MACOS_SONOMA | macOS 14 Sonoma (2023) | |
| OS_MACOS_SEQUOIA | macOS 15 Sequoia (2024) | |
| OS_MACOS_TAHOE | macOS 26 Tahoe (2025) | |
| 其他Apple操作系統 | OS_IOS | iOS (iPhone/iPod touch) |
| OS_IPADOS | iPadOS (iPad) | |
| OS_WATCHOS | watchOS (Apple Watch) | |
| OS_TVOS | tvOS (Apple TV) | |
| OS_VISIONOS | visionOS (Apple Vision Pro) | |
| OS_BRIDGEOS | bridgeOS (Apple T2芯片) | |
| OS_AUDIOOS | audioOS (HomePod) | |
| BSD系列 | OS_BSD | 通用BSD標識 |
| OS_FREEBSD | FreeBSD | |
| Unix系列 | OS_UNIX | 通用Unix標識 |
| 新興操作系統 | OS_FUCHSIA | Google Fuchsia |
| OS_HARMONYOS | Harmony OS | |
| 其它操作系統 | OS_REACTOS | ReactOS |
| 未知操作系統 | OS_UNKNOWN | 無法識別的操作系統 |
用法示例
// 獲取系統信息
int osCode = tc::systemCheck();
const char* osName = tc::getOSName(osCode);
std::string osVersionInfo = tc::getOSVersionInfo();
// 顯示系統信息
tc::println("操作系統: ", osName);
tc::println("系統版本: ", osVersionInfo);
// 根據系統類型執行不同操作
switch (osCode) {
case OS_WINDOWSNT11:
tc::println("Windows 11系統特定操作");
break;
case OS_UBUNTU:
tc::println("Ubuntu系統特定操作");
break;
case OS_MACOS:
tc::println("macOS系統特定操作");
break;
// ... 其他系統 ...
default:
tc::println("未知系統操作");
}
?? 獲取系統時間
| 宏名 | 說明 |
|---|---|
| SYS_YEAR | 年 |
| SYS_MONTH | 月 |
| SYS_DAY | 日 |
| SYS_HOUR | 時 |
| SYS_MINUTE | 分 |
| SYS_SECOND | 秒 |
| SYS_TIMESTAMP | Unix時間戳(默認) |
int year = tc::getSystemTime(SYS_YEAR);
int timestamp = tc::getSystemTime(); // Unix時間戳
?? 按鍵處理
waitKey - 等待按鍵
tc::waitKey():等待任意按鍵tc::waitKey(char key)/tc::waitKey(int key):等待特定按鍵(如 tc::waitKey('A')、tc::waitKey(KEY_ESC))
tc::waitKey(); // 等待任意鍵
// 等待按下A鍵
tc::waitKey('A');
// 等待ESC鍵
tc::waitKey(KEY_ESC);
isKeyPressed - 檢測按鍵狀態
tc::isKeyPressed(char key)/tc::isKeyPressed(int key):檢測指定按鍵是否被按下
// 檢測ESC鍵是否被按下
if (tc::isKeyPressed(KEY_ESC)) {
std::cout << "ESC鍵被按下" << std::endl;
}
// 檢測方向鍵
if (tc::isKeyPressed(KEY_UP)) {
std::cout << "上方向鍵被按下" << std::endl;
}
// 檢測字母鍵
if (tc::isKeyPressed('A') || tc::isKeyPressed('a')) {
std::cout << "A鍵被按下" << std::endl;
}
常用特殊按鍵宏
| 宏名 | 說明 |
|---|---|
| KEY_ESC | ESC |
| KEY_SPACE | 空格 |
| KEY_ENTER | 回車 |
| KEY_TAB | Tab |
| KEY_BACKSPACE | 退格 |
| KEY_INSERT | Insert |
| KEY_DELETE | Delete |
| KEY_HOME | Home |
| KEY_END | End |
| KEY_PAGEUP | PageUp |
| KEY_PAGEDOWN | PageDown |
| KEY_UP | 上方向鍵 |
| KEY_DOWN | 下方向鍵 |
| KEY_LEFT | 左方向鍵 |
| KEY_RIGHT | 右方向鍵 |
| KEY_F1 ~ KEY_F12 | F1~F12 功能鍵 |
??? 編譯
- Windows:
g++ -std=c++17 test.cpp -o test.exe - Linux/macOS:
g++ -std=c++17 -pthread test.cpp -o test
?? 協議
MIT
?? 聯系
- ?? 電子郵件:wushaoquan666@outlook.com
本文來自博客園,作者:山地奧斯卡537,轉載請注明原文鏈接:http://www.rzrgm.cn/sean537/p/19015345
TC.hpp - 跨平臺C++終端控制庫 一個現代化的C++17頭文件庫,提供跨平臺的終端控制功能: ?? 彩色輸出:支持16色、RGB、背景色及多種字體樣式 ??? 跨平臺兼容:自動適配Windows/Linux/macOS終端 ? 零依賴:純頭文件實現,開箱即用 ?? 實用功能:進度條、延時輸出、光標控制、終端尺寸檢測 ??? 鏈式API:流暢的Printer操作接口 ?? 系統工具:獲取時間、執行命令、系統環境檢測
浙公網安備 33010602011771號