yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
terminal_colors.h
Go to the documentation of this file.
1#ifndef YAZE_SRC_CLI_UTIL_TERMINAL_COLORS_H_
2#define YAZE_SRC_CLI_UTIL_TERMINAL_COLORS_H_
3
4#include <chrono>
5#include <iostream>
6#include <string>
7#include <thread>
8
9namespace yaze {
10namespace cli {
11namespace util {
12
13// ANSI color codes
14namespace colors {
15constexpr const char* kReset = "\033[0m";
16constexpr const char* kBold = "\033[1m";
17constexpr const char* kDim = "\033[2m";
18
19// Regular colors
20constexpr const char* kBlack = "\033[30m";
21constexpr const char* kRed = "\033[31m";
22constexpr const char* kGreen = "\033[32m";
23constexpr const char* kYellow = "\033[33m";
24constexpr const char* kBlue = "\033[34m";
25constexpr const char* kMagenta = "\033[35m";
26constexpr const char* kCyan = "\033[36m";
27constexpr const char* kWhite = "\033[37m";
28
29// Bright colors
30constexpr const char* kBrightBlack = "\033[90m";
31constexpr const char* kBrightRed = "\033[91m";
32constexpr const char* kBrightGreen = "\033[92m";
33constexpr const char* kBrightYellow = "\033[93m";
34constexpr const char* kBrightBlue = "\033[94m";
35constexpr const char* kBrightMagenta = "\033[95m";
36constexpr const char* kBrightCyan = "\033[96m";
37constexpr const char* kBrightWhite = "\033[97m";
38
39// Background colors
40constexpr const char* kBgBlack = "\033[40m";
41constexpr const char* kBgRed = "\033[41m";
42constexpr const char* kBgGreen = "\033[42m";
43constexpr const char* kBgYellow = "\033[43m";
44constexpr const char* kBgBlue = "\033[44m";
45constexpr const char* kBgMagenta = "\033[45m";
46constexpr const char* kBgCyan = "\033[46m";
47constexpr const char* kBgWhite = "\033[47m";
48} // namespace colors
49
50// Icon set
51namespace icons {
52constexpr const char* kSuccess = "✓";
53constexpr const char* kError = "✗";
54constexpr const char* kWarning = "⚠";
55constexpr const char* kInfo = "ℹ";
56constexpr const char* kSpinner = "◐◓◑◒";
57constexpr const char* kRobot = "🤖";
58constexpr const char* kTool = "🔧";
59constexpr const char* kThinking = "💭";
60constexpr const char* kArrow = "→";
61} // namespace icons
62
63// Simple loading indicator
65 public:
66 LoadingIndicator(const std::string& message, bool show = true)
67 : message_(message), show_(show), running_(false) {}
68
70 Stop();
71 }
72
73 void Start() {
74 if (!show_ || running_) return;
75 running_ = true;
76
77 thread_ = std::thread([this]() {
78 const char* spinner[] = {"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"};
79 int idx = 0;
80
81 while (running_) {
82 std::cout << "\r" << colors::kCyan << spinner[idx] << " "
83 << colors::kBold << message_ << colors::kReset << std::flush;
84 idx = (idx + 1) % 10;
85 std::this_thread::sleep_for(std::chrono::milliseconds(80));
86 }
87
88 // Clear the line
89 std::cout << "\r" << std::string(message_.length() + 10, ' ') << "\r" << std::flush;
90 });
91 }
92
93 void Stop() {
94 if (running_) {
95 running_ = false;
96 if (thread_.joinable()) {
97 thread_.join();
98 }
99 }
100 }
101
102 void UpdateMessage(const std::string& message) {
103 message_ = message;
104 }
105
106 private:
107 std::string message_;
108 bool show_;
110 std::thread thread_;
111};
112
113// Utility functions for colored output
114inline void PrintSuccess(const std::string& message) {
115 std::cout << colors::kGreen << icons::kSuccess << " " << message << colors::kReset << std::endl;
116}
117
118inline void PrintError(const std::string& message) {
119 std::cerr << colors::kRed << icons::kError << " " << message << colors::kReset << std::endl;
120}
121
122inline void PrintWarning(const std::string& message) {
123 std::cerr << colors::kYellow << icons::kWarning << " " << message << colors::kReset << std::endl;
124}
125
126inline void PrintInfo(const std::string& message) {
127 std::cout << colors::kBlue << icons::kInfo << " " << message << colors::kReset << std::endl;
128}
129
130inline void PrintToolCall(const std::string& tool_name, const std::string& details = "") {
131 std::cout << colors::kMagenta << icons::kTool << " " << colors::kBold
132 << "Calling tool: " << colors::kReset << colors::kCyan << tool_name
134 if (!details.empty()) {
135 std::cout << colors::kDim << " (" << details << ")" << colors::kReset;
136 }
137 std::cout << std::endl;
138}
139
140inline void PrintThinking(const std::string& message = "Processing...") {
141 std::cout << colors::kYellow << icons::kThinking << " " << colors::kDim
142 << message << colors::kReset << std::endl;
143}
144
145inline void PrintSeparator() {
146 std::cout << colors::kDim << "─────────────────────────────────────────"
147 << colors::kReset << std::endl;
148}
149
150} // namespace util
151} // namespace cli
152} // namespace yaze
153
154#endif // YAZE_SRC_CLI_UTIL_TERMINAL_COLORS_H_
void UpdateMessage(const std::string &message)
LoadingIndicator(const std::string &message, bool show=true)
constexpr const char * kBrightBlack
constexpr const char * kBgGreen
constexpr const char * kBrightWhite
constexpr const char * kBrightCyan
constexpr const char * kBgWhite
constexpr const char * kBgMagenta
constexpr const char * kBgBlue
constexpr const char * kDim
constexpr const char * kBgCyan
constexpr const char * kBlue
constexpr const char * kYellow
constexpr const char * kGreen
constexpr const char * kBrightBlue
constexpr const char * kMagenta
constexpr const char * kReset
constexpr const char * kBrightGreen
constexpr const char * kWhite
constexpr const char * kBlack
constexpr const char * kBrightYellow
constexpr const char * kBrightMagenta
constexpr const char * kBgRed
constexpr const char * kBrightRed
constexpr const char * kBgBlack
constexpr const char * kCyan
constexpr const char * kRed
constexpr const char * kBgYellow
constexpr const char * kBold
constexpr const char * kArrow
constexpr const char * kThinking
constexpr const char * kTool
constexpr const char * kWarning
constexpr const char * kError
constexpr const char * kInfo
constexpr const char * kRobot
constexpr const char * kSpinner
constexpr const char * kSuccess
void PrintThinking(const std::string &message="Processing...")
void PrintWarning(const std::string &message)
void PrintToolCall(const std::string &tool_name, const std::string &details="")
void PrintInfo(const std::string &message)
void PrintSuccess(const std::string &message)
void PrintError(const std::string &message)
Main namespace for the application.