diff --git a/src/client/linux/main.cpp b/src/client/linux/main.cpp index d82ae02a..aac386bd 100644 --- a/src/client/linux/main.cpp +++ b/src/client/linux/main.cpp @@ -74,7 +74,7 @@ namespace { auto configuration_updated = false; if (g_settings.auto_update_config && g_config_file.update()) { - verbose("Configuration updated"); + message("Configuration updated"); if (!g_server.send_config(g_config_file.config())) return; configuration_updated = true; @@ -146,6 +146,12 @@ namespace { } } // namespace +void show_notification(const char* message) { + auto ss = std::stringstream(); + ss << "notify-send -a keymapper keymapper \"" << message << "\""; + std::system(ss.str().c_str()); +} + int main(int argc, char* argv[]) { if (!interpret_commandline(g_settings, argc, argv)) { print_help_message(); diff --git a/src/common/output.cpp b/src/common/output.cpp index b047cb07..57c65dde 100644 --- a/src/common/output.cpp +++ b/src/common/output.cpp @@ -19,15 +19,19 @@ const char* about_footer = "This program comes with absolutely no warranty.\n" "See the GNU General Public License, version 3 for details."; -#if defined(_WIN32) - -#include "windows/win.h" -#include - extern void show_notification(const char* message); +#if defined(_WIN32) +# include "windows/win.h" +# include +#endif + namespace { - void vprint(bool notify, const char* format, va_list args) { + void vprint(const char* format, va_list args, bool notify, bool is_error) { + auto buffer = std::array(); + std::vsnprintf(buffer.data(), buffer.size(), format, args); + +#if defined(_WIN32) static const auto s_has_console = [](){ if (AttachConsole(ATTACH_PARENT_PROCESS)) { FILE *stream; @@ -38,80 +42,42 @@ namespace { return false; }(); - if (s_has_console) { - std::vfprintf(stdout, format, args); - std::fputc('\n', stdout); - std::fflush(stdout); - } - - auto buffer = std::array(); - std::vsnprintf(buffer.data(), buffer.size(), format, args); - if (notify) - show_notification(buffer.data()); - -#if !defined(NDEBUG) +# if !defined(NDEBUG) OutputDebugStringA(buffer.data()); OutputDebugStringA("\n"); +# endif #endif - } -} // namespace -void message(const char* format, ...) { - va_list args; - va_start(args, format); - vprint(true, format, args); - va_end(args); -} - -void error(const char* format, ...) { - va_list args; - va_start(args, format); - vprint(true, format, args); - va_end(args); -} + if (is_error) + std::fputs("ERROR: ", stdout); + std::fputs(buffer.data(), stdout); + std::fputc('\n', stdout); + std::fflush(stdout); -void verbose(const char* format, ...) { - if (g_verbose_output) { - va_list args; - va_start(args, format); - vprint(false, format, args); - va_end(args); + if (notify) + show_notification(buffer.data()); } -} - -#else // !defined(_WIN32) - -#include -#include -#include +} // namespace void message(const char* format, ...) { va_list args; va_start(args, format); - std::vfprintf(stdout, format, args); + vprint(format, args, true, false); va_end(args); - std::fputc('\n', stdout); - std::fflush(stdout); } void error(const char* format, ...) { va_list args; va_start(args, format); - std::fprintf(stderr, "ERROR: "); - std::vfprintf(stderr, format, args); + vprint(format, args, true, true); va_end(args); - std::fputc('\n', stderr); } void verbose(const char* format, ...) { if (g_verbose_output) { va_list args; va_start(args, format); - std::vfprintf(stdout, format, args); + vprint(format, args, false, false); va_end(args); - std::fputc('\n', stdout); - std::fflush(stdout); } } - -#endif // !defined(_WIN32) diff --git a/src/server/linux/main.cpp b/src/server/linux/main.cpp index 66ba8ac7..cbb20f8d 100644 --- a/src/server/linux/main.cpp +++ b/src/server/linux/main.cpp @@ -258,6 +258,10 @@ namespace { } } // namespace +void show_notification(const char* message) { + // don't show notifications +} + int main(int argc, char* argv[]) { auto settings = Settings{ };