diff options
| author | Stefan Boberg <[email protected]> | 2025-03-12 14:49:26 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-03-12 14:49:26 +0100 |
| commit | 3a20e6ce26c95dd49fcbcf68e2cc9d47b5ff2456 (patch) | |
| tree | d6c7e620101c60538a639f8d8b97e71c02d809c5 /src | |
| parent | fix log timestamps (diff) | |
| parent | ProgressBar improvements (#305) (diff) | |
| download | zen-3a20e6ce26c95dd49fcbcf68e2cc9d47b5ff2456.tar.xz zen-3a20e6ce26c95dd49fcbcf68e2cc9d47b5ff2456.zip | |
Merge branch 'main' into sb/build-cache
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/zen.cpp | 31 | ||||
| -rw-r--r-- | src/zen/zen.h | 1 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/zen/zen.cpp b/src/zen/zen.cpp index b7faddaca..9d0eab7dc 100644 --- a/src/zen/zen.cpp +++ b/src/zen/zen.cpp @@ -57,6 +57,10 @@ ZEN_THIRD_PARTY_INCLUDES_END #include <zencore/memory/newdelete.h> +#ifndef ZEN_PLATFORM_WINDOWS +# include <unistd.h> +#endif + ////////////////////////////////////////////////////////////////////////// namespace zen { @@ -262,8 +266,22 @@ ZenCmdBase::ResolveTargetHostSpec(const std::string& InHostSpec) return ResolveTargetHostSpec(InHostSpec, /* out */ Dummy); } +static bool +IsStdoutTty() +{ +#if ZEN_PLATFORM_WINDOWS + static HANDLE hStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); + DWORD dwMode = 0; + static bool IsConsole = ::GetConsoleMode(hStdOut, &dwMode); + return IsConsole; +#else + return isatty(fileno(stdout)); +#endif +} + ProgressBar::ProgressBar(bool PlainProgress, bool ShowDetails) -: m_PlainProgress(PlainProgress) +: m_StdoutIsTty(IsStdoutTty()) +, m_PlainProgress(PlainProgress || !m_StdoutIsTty) , m_ShowDetails(ShowDetails) , m_LastUpdateMS(m_SW.GetElapsedTimeMs() - 10000) { @@ -331,7 +349,16 @@ ProgressBar::UpdateState(const State& NewState, bool DoLinebreak) LineToPrint << "\n"; #if ZEN_PLATFORM_WINDOWS - WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), LineToPrint.c_str(), (DWORD)LineToPrint.Size(), 0, 0); + static HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); + + if (m_StdoutIsTty) + { + WriteConsoleA(hStdOut, LineToPrint.c_str(), (DWORD)LineToPrint.Size(), 0, 0); + } + else + { + ::WriteFile(hStdOut, (LPCVOID)LineToPrint.c_str(), (DWORD)LineToPrint.Size(), 0, 0); + } #else fwrite(LineToPrint.c_str(), 1, LineToPrint.Size(), stdout); #endif diff --git a/src/zen/zen.h b/src/zen/zen.h index 835c2b6ac..6765101db 100644 --- a/src/zen/zen.h +++ b/src/zen/zen.h @@ -94,6 +94,7 @@ public: bool HasActiveTask() const; private: + const bool m_StdoutIsTty = true; const bool m_PlainProgress; const bool m_ShowDetails; Stopwatch m_SW; |