diff --git a/lib/LogVisor.cpp b/lib/LogVisor.cpp index b01f190..d60cf82 100644 --- a/lib/LogVisor.cpp +++ b/lib/LogVisor.cpp @@ -3,6 +3,10 @@ #define WIN32_LEAN_AND_MEAN 1 #endif #include +#else +#include +#include +#include #endif #include @@ -62,6 +66,23 @@ static std::chrono::steady_clock::time_point GlobalStart = MonoClock.now(); static inline std::chrono::steady_clock::duration CurrentUptime() {return MonoClock.now() - GlobalStart;} std::atomic_uint_fast64_t FrameIndex(0); + +static inline int ConsoleWidth() +{ + int retval = 80; +#if _WIN32 + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info); + retval = info.dwSize.X; +#else + struct winsize w; + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1) + retval = w.ws_col; +#endif + if (retval < 10) + return 10; + return retval; +} #if _WIN32 static HANDLE Term = 0; @@ -75,6 +96,9 @@ struct ConsoleLogger : public ILogger ConsoleLogger() { #if _WIN32 + const char* conemuANSI = getenv("ConEmuANSI"); + if (conemuANSI && !strcmp(conemuANSI, "ON")) + XtermColor = true; if (!Term) Term = GetStdHandle(STD_ERROR_HANDLE); #else @@ -92,6 +116,13 @@ struct ConsoleLogger : public ILogger static void _reportHead(const char* modName, const char* sourceInfo, Level severity) { + /* Clear current line out */ + int width = ConsoleWidth(); + fprintf(stderr, "\r"); + for (int w=0 ; w