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
71 void Start() {
72 if (!show_ || running_)
73 return;
74 running_ = true;
75
76 thread_ = std::thread([this]() {
77 const char* spinner[] = {"⠋", "⠙", "⠹", "⠸", "⠼",
78 "⠴", "⠦", "⠧", "⠇", "⠏"};
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"
90 << std::flush;
91 });
92 }
93
94 void Stop() {
95 if (running_) {
96 running_ = false;
97 if (thread_.joinable()) {
98 thread_.join();
99 }
100 }
101 }
102
103 void UpdateMessage(const std::string& message) { message_ = message; }
104
105 private:
106 std::string message_;
107 bool show_;
109 std::thread thread_;
110};
111
112// Utility functions for colored output
113inline void PrintSuccess(const std::string& message) {
114 std::cout << colors::kGreen << icons::kSuccess << " " << message
115 << colors::kReset << std::endl;
116}
117
118inline void PrintError(const std::string& message) {
119 std::cerr << colors::kRed << icons::kError << " " << message << colors::kReset
120 << std::endl;
121}
122
123inline void PrintWarning(const std::string& message) {
124 std::cerr << colors::kYellow << icons::kWarning << " " << message
125 << colors::kReset << std::endl;
126}
127
128inline void PrintInfo(const std::string& message) {
129 std::cout << colors::kBlue << icons::kInfo << " " << message << colors::kReset
130 << std::endl;
131}
132
133inline void PrintToolCall(const std::string& tool_name,
134 const std::string& details = "") {
135 std::cout << colors::kMagenta << icons::kTool << " " << colors::kBold
136 << "Calling tool: " << colors::kReset << colors::kCyan << tool_name
138 if (!details.empty()) {
139 std::cout << colors::kDim << " (" << details << ")" << colors::kReset;
140 }
141 std::cout << std::endl;
142}
143
144inline void PrintThinking(const std::string& message = "Processing...") {
145 std::cout << colors::kYellow << icons::kThinking << " " << colors::kDim
146 << message << colors::kReset << std::endl;
147}
148
149inline void PrintSeparator() {
150 std::cout << colors::kDim << "─────────────────────────────────────────"
151 << colors::kReset << std::endl;
152}
153
154} // namespace util
155} // namespace cli
156} // namespace yaze
157
158#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)