#pragma once #include #include #include #include // Gets set to whatever your terminal emulator is configured for. // This means black can be shown as purple if configured that way. namespace mcolor { /// Used for composing legacy ANSI escape sequence builtin colors. /// We much recommend using modern Color4/Color3 enum class AnsiColor : uint8_t { RESET = 0, BELL, BOLD, DIM = 2, FG_BLACK = 30, FG_RED, FG_GREEN, FG_YELLOW, FG_BLUE, FG_MAGENTA, FG_CYAN, FG_WHITE, FG_DEFAULT = 39, BG_BLACK = 40, BG_RED, BG_GREEN, BG_YELLOW, BG_BLUE, BG_MAGENTA, BG_CYAN, BG_WHITE, BG_DEFAULT = 49, FG_BRIGHT_BLACK = 90, FG_BRIGHT_RED, FG_BRIGHT_GREEN, FG_BRIGHT_YELLOW, FG_BRIGHT_BLUE, FG_BRIGHT_MAGENTA, FG_BRIGHT_CYAN, FG_BRIGHT_WHITE = 97, BG_BRIGHT_BLACK = 100, BG_BRIGHT_RED, BG_BRIGHT_GREEN, BG_BRIGHT_YELLOW, BG_BRIGHT_BLUE, BG_BRIGHT_MAGENTA, BG_BRIGHT_CYAN, BG_BRIGHT_WHITE = 107, }; static const std::string AnsiEscapePrefix = "\033["; namespace AnsiEscapeCodes { #pragma region General static const std::string Bell = "\a"; static const std::string Backspace = "\b"; static const std::string Tab = "\t"; static const std::string Newline = "\n"; static const std::string VerticalTab = "\v"; static const std::string Newpage = "\f"; static const std::string Return = "\r"; static const std::string Escape = "\033"; #pragma endregion #pragma region Cursor Controls /// Moves cursor to home position {0, 0}. static const std::string CursorHome = AnsiEscapePrefix + "H"; /// Moves cursor to line Y, column X. static std::string CursorTo(int line, int column); /// Moves the cursor up # lines. static std::string CursorUp(int lines); /// Moves the cursor down # lines. static std::string CursorDown(int lines); /// Moves the cursor right # lines. static std::string CursorRight(int lines); /// Moves the cursor left # lines. static std::string CursorLeft(int lines); /// Moves cursor to the beginning of line, # lines down from the current line. static std::string CursorNextLineStart(int lines); /// Moves cursor to the beginning of line, # lines up from the current line. static std::string CursorPrevLineStart(int lines); /// Moves cursor to column #. static std::string CursorColumn(int column); /// Save current cursor position. static const std::string CursorSave = AnsiEscapePrefix + "7"; /// Restore cursor to last saved position. static const std::string CursorRestore = AnsiEscapePrefix + "8"; #pragma endregion #pragma region Erase Functions static const std::string EraseInDisplay = AnsiEscapePrefix + "J"; /// Erase from cursor until end of screen. static const std::string EraseAfterCursor = AnsiEscapePrefix + "0J"; /// Erase from cursor to beginning of screen. static const std::string EraseBeforeCursor = AnsiEscapePrefix + "1J"; static const std::string EraseEntireScreen = AnsiEscapePrefix + "2J"; static const std::string EraseSavedLines = AnsiEscapePrefix + "3J"; static const std::string EraseInLine = AnsiEscapePrefix + "K"; static const std::string EraseLineAfterCursor = AnsiEscapePrefix + "0K"; static const std::string EraseLineBeforeCursor = AnsiEscapePrefix + "1K"; #pragma endregion #pragma region Graphics Sequences static const std::string ResetAll = AnsiEscapePrefix + "0m"; static const std::string Bold = AnsiEscapePrefix + "1m"; static const std::string Dim = AnsiEscapePrefix + "2m"; static const std::string Italic = AnsiEscapePrefix + "3m"; static const std::string Underline = AnsiEscapePrefix + "4m"; static const std::string Blinking = AnsiEscapePrefix + "5m"; static const std::string Inverse = AnsiEscapePrefix + "6m"; static const std::string Hidden = AnsiEscapePrefix + "7m"; static const std::string Strikethrough = AnsiEscapePrefix + "8m"; #pragma endregion #pragma region Color Sequences static const std::string FgBlack = AnsiEscapePrefix + "30"; static const std::string BgBlack = AnsiEscapePrefix + "40"; static const std::string FgRed = AnsiEscapePrefix + "31"; static const std::string BgRed = AnsiEscapePrefix + "41"; static const std::string FgGreen = AnsiEscapePrefix + "32"; static const std::string BgGreen = AnsiEscapePrefix + "42"; static const std::string FgYellow = AnsiEscapePrefix + "33"; static const std::string BgYellow = AnsiEscapePrefix + "43"; static const std::string FgBlue = AnsiEscapePrefix + "34"; static const std::string BgBlue = AnsiEscapePrefix + "44"; static const std::string FgMagenta = AnsiEscapePrefix + "35"; static const std::string BgMagenta = AnsiEscapePrefix + "45"; static const std::string FgCyan = AnsiEscapePrefix + "36"; static const std::string BgCyan = AnsiEscapePrefix + "46"; static const std::string FgWhite = AnsiEscapePrefix + "37"; static const std::string BgWhite = AnsiEscapePrefix + "47"; static const std::string FgDefault = AnsiEscapePrefix + "38"; static const std::string BgDefault = AnsiEscapePrefix + "48"; static const std::string FgBrightBlack = AnsiEscapePrefix + "90"; static const std::string BgBrightBlack = AnsiEscapePrefix + "100"; static const std::string FgBrightRed = AnsiEscapePrefix + "91"; static const std::string BgBrightRed = AnsiEscapePrefix + "101"; static const std::string FgBrightGreen = AnsiEscapePrefix + "92"; static const std::string BgBrightGreen = AnsiEscapePrefix + "102"; static const std::string FgBrightYellow = AnsiEscapePrefix + "93"; static const std::string BgBrightYellow = AnsiEscapePrefix + "103"; static const std::string FgBrightBlue = AnsiEscapePrefix + "94"; static const std::string BgBrightBlue = AnsiEscapePrefix + "104"; static const std::string FgBrightMagenta = AnsiEscapePrefix + "95"; static const std::string BgBrightMagenta = AnsiEscapePrefix + "105"; static const std::string FgBrightCyan = AnsiEscapePrefix + "96"; static const std::string BgBrightCyan = AnsiEscapePrefix + "106"; static const std::string FgBrightWhite = AnsiEscapePrefix + "97"; static const std::string BgBrightWhite = AnsiEscapePrefix + "107"; static std::string FgTrueColor(int r, int g, int b); static std::string FgTrueColor(const Color4& c); static std::string BgTrueColor(int r, int g, int b); static std::string BgTrueColor(const Color4& c); #pragma endregion #pragma region Private Modes inline static const std::string CursorInvisible = AnsiEscapePrefix + "?25l"; static const std::string CursorVisible = AnsiEscapePrefix + "?25h"; static const std::string RestoreScreen = AnsiEscapePrefix + "?47l"; static const std::string SaveScreen = AnsiEscapePrefix + "?47h"; static const std::string EnableAltBuffer = AnsiEscapePrefix + "?1049h"; static const std::string DisableAltBuffer = AnsiEscapePrefix + "?1049l"; #pragma endregion } }