Skip to content
Snippets Groups Projects
Commit 30d80144 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Added simple console manager

- can switch colorized mode
- can check if output is a terminal
parent 1f7451b6
Branches
Tags
No related merge requests found
......@@ -4,9 +4,11 @@
#include <rang.hpp>
#include <FPEManager.hpp>
#include <SignalManager.hpp>
#include <ConsoleManager.hpp>
#include <CLI/CLI.hpp>
#include <cassert>
#include <limits>
inline double e(double rho, double p, double gamma)
{
......@@ -128,9 +130,13 @@ int main(int argc, char *argv[])
bool disable_fpe = false;
app.add_flag("--no-fpe", disable_fpe, "Do not trap floating point exceptions");
bool disable_signals = false;
app.add_flag("--no-signal", disable_signals, "Catches signals");
app.add_flag("--no-signal", disable_signals, "Do not catches signals");
std::string colorize="auto";
app.add_set("--colorize", colorize, {"auto", "yes", "no"}, "Colorize console output", true);
int threads=-1;
app.add_option("--threads", threads, "Number of Kokkos threads");
app.add_option("--threads", threads, "Number of Kokkos threads")->check(CLI::Range(1,std::numeric_limits<decltype(threads)>::max()));
std::atexit([](){std::cout << rang::style::reset;});
try {
......@@ -139,9 +145,12 @@ int main(int argc, char *argv[])
return app.exit(e);
}
ConsoleManager::init(colorize);
FPEManager::init(not disable_fpe);
SignalManager::init(not disable_signals);
std::cout << "colorize=" << colorize << '\n';
std::cout << "Code version: "
<< rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n';
......
......@@ -5,6 +5,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_library(
PastisUtils
ConsoleManager.cpp
FPEManager.cpp
RevisionInfo.cpp
SignalManager.cpp)
......
#include <ConsoleManager.hpp>
#include <rang.hpp>
bool ConsoleManager::isTerminal(std::ostream& os)
{
return rang::rang_implementation::isTerminal(os.rdbuf());
}
void ConsoleManager::init(const std::string& colorize)
{
std::cout << "Console management: color ";
if (colorize == "auto") {
if (isTerminal(std::cout)) {
std::cout << rang::style::bold
<< rang::fgB::green
<< "enabled"
<< rang::fg::reset
<< rang::style::reset;
} else {
std::cout << "disabled";
}
std::cout << " [auto]\n";
} else if (colorize == "yes") {
rang::setControlMode(rang::control::Force);
std::cout << rang::style::bold
<< rang::fgB::green
<< "enabled"
<< rang::fg::reset
<< rang::style::reset;
std::cout << " ["
<< rang::style::bold
<< rang::fgB::red
<< "forced"
<< rang::fg::reset
<< rang::style::reset
<< "]\n";
} else if (colorize == "no") {
rang::setControlMode(rang::control::Off);
std::cout << "disabled [forced]\n";
} else {
std::cerr << "Unknown colorize option: " << colorize << '\n';
std::exit(1);
}
}
#ifndef CONSOLE_MANAGER_HPP
#define CONSOLE_MANAGER_HPP
#include <string>
struct ConsoleManager
{
static bool isTerminal(std::ostream& os);
static void init(const std::string& colorize);
};
#endif // CONSOLE_MANAGER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment