Fix problem that'd sometimes cause errors when using the macros in a lot of different files.
139 lines
5.4 KiB
C++
139 lines
5.4 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <cstdint>
|
|
#include <format>
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
#ifdef _WIN32
|
|
namespace jlog::ansi_escape_codes
|
|
{
|
|
const WORD FG_BLACK = 0;
|
|
const WORD FG_RED = FOREGROUND_RED;
|
|
const WORD FG_GREEN = FOREGROUND_GREEN;
|
|
const WORD FG_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN;
|
|
const WORD FG_BLUE = FOREGROUND_BLUE;
|
|
const WORD FG_MAGENTA = FOREGROUND_RED | FOREGROUND_BLUE;
|
|
const WORD FG_CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE;
|
|
const WORD FG_WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
|
|
const WORD FG_DEFAULT = FG_WHITE;
|
|
|
|
const WORD FG_BRIGHT_BLACK = 0 | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_RED = FOREGROUND_RED | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_GREEN = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_BLUE = FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_MAGENTA = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
|
const WORD FG_BRIGHT_WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
|
|
|
inline void SetConsoleTextColor(WORD color) {
|
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
|
|
}
|
|
}
|
|
#else
|
|
namespace jlog::ansi_escape_codes
|
|
{
|
|
inline static const std::string CURSOR_HOME = "\033[H";
|
|
|
|
inline static const std::string ERASE_SCREEN_AFTER_CURSOR = "\033[0J";
|
|
inline static const std::string ERASE_SCREEN_BEFORE_CURSOR = "\033[1J";
|
|
inline static const std::string ERASE_SCREEN_ALL = "\033[2J";
|
|
inline static const std::string ERASE_LINE_AFTER_CURSOR = "\033[0K";
|
|
inline static const std::string ERASE_LINE_BEFORE_CURSOR = "\033[1K";
|
|
inline static const std::string ERASE_LINE_ALL = "\033[2K";
|
|
|
|
inline static const std::string RESET = "\033[0m";
|
|
inline static const std::string BOLD = "\033[1m";
|
|
inline static const std::string DIM = "\033[2m";
|
|
|
|
/// These are some examples of private modes, which are not defined by the spec, but are implemented in most terminals.
|
|
/// @see xterm control sequences for a more in-depth list.
|
|
/// https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
|
|
/// @note While these modes may be supported by most terminals, some may not work in multiplexers like tmux.
|
|
|
|
inline static const std::string CURSOR_INVISIBLE = "\033[?25l";
|
|
inline static const std::string CURSOR_VISIBLE = "\033[?25h";
|
|
inline static const std::string RESTORE_SCREEN = "\033[?47l";
|
|
inline static const std::string SAVE_SCREEN = "\033[?47h";
|
|
|
|
|
|
inline static const std::string FG_BLACK = "\033[30m";
|
|
inline static const std::string FG_RED = "\033[31m";
|
|
inline static const std::string FG_GREEN = "\033[32m";
|
|
inline static const std::string FG_YELLOW = "\033[33m";
|
|
inline static const std::string FG_BLUE = "\033[34m";
|
|
inline static const std::string FG_MAGENTA = "\033[35m";
|
|
inline static const std::string FG_CYAN = "\033[36m";
|
|
inline static const std::string FG_WHITE = "\033[37m";
|
|
inline static const std::string FG_DEFAULT = "\033[39m";
|
|
|
|
|
|
inline static const std::string FG_BRIGHT_BLACK = "\033[90m";
|
|
inline static const std::string FG_BRIGHT_RED = "\033[91m";
|
|
inline static const std::string FG_BRIGHT_GREEN = "\033[92m";
|
|
inline static const std::string FG_BRIGHT_YELLOW = "\033[93m";
|
|
inline static const std::string FG_BRIGHT_BLUE = "\033[94m";
|
|
inline static const std::string FG_BRIGHT_MAGENTA = "\033[95m";
|
|
inline static const std::string FG_BRIGHT_CYAN = "\033[96m";
|
|
inline static const std::string FG_BRIGHT_WHITE = "\033[97m";
|
|
|
|
|
|
inline static const std::string BG_BLACK = "\033[40m";
|
|
inline static const std::string BG_RED = "\033[41m";
|
|
inline static const std::string BG_GREEN = "\033[42m";
|
|
inline static const std::string BG_YELLOW = "\033[43m";
|
|
inline static const std::string BG_BLUE = "\033[44m";
|
|
inline static const std::string BG_MAGENTA = "\033[45m";
|
|
inline static const std::string BG_CYAN = "\033[46m";
|
|
inline static const std::string BG_WHITE = "\033[47m";
|
|
inline static const std::string BG_DEFAULT = "\033[49m";
|
|
|
|
inline static const std::string BG_BRIGHT_BLACK = "\033[100m";
|
|
inline static const std::string BG_BRIGHT_RED = "\033[101m";
|
|
inline static const std::string BG_BRIGHT_GREEN = "\033[102m";
|
|
inline static const std::string BG_BRIGHT_YELLOW = "\033[103m";
|
|
inline static const std::string BG_BRIGHT_BLUE = "\033[104m";
|
|
inline static const std::string BG_BRIGHT_MAGENTA = "\033[105m";
|
|
inline static const std::string BG_BRIGHT_CYAN = "\033[106m";
|
|
inline static const std::string BG_BRIGHT_WHITE = "\033[107m";
|
|
|
|
inline std::string true_color(uint8_t r, uint8_t g, uint8_t b)
|
|
{
|
|
return std::format("\033[38;2;{};{};{}m", r, g, b);
|
|
}
|
|
|
|
inline std::string cursor_to(int line, int col)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
inline std::string cursor_up(int lines)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
inline std::string cursor_down(int lines)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
inline std::string cursor_left(int cols)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
inline std::string cursor_right(int cols)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
inline std::string cursor_to_col(int col)
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
#endif |