From 04c84dfbc17d31c1263e89b3117a1e2bf6bb3267 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sun, 23 Oct 2022 02:53:46 +0300 Subject: [PATCH] kdecore: implement KDE_DEBUG_COLOR for KDebug Signed-off-by: Ivailo Monev --- kdecore/io/kdebug.cpp | 40 ++++++++++++++++++++++-- kdecore/io/kdebug.h | 12 +++---- kdecore/tests/kdebugtest.cpp | 6 ++-- kdecore/util/qtest_kde.h | 4 +-- kdeui/tests/kmanagerselectiontest.cpp | 2 +- kdeui/tests/kstartupinfo_unittest.cpp | 2 +- kdeui/tests/ktimezonewidget_unittest.cpp | 1 - 7 files changed, 50 insertions(+), 17 deletions(-) diff --git a/kdecore/io/kdebug.cpp b/kdecore/io/kdebug.cpp index 40e77b90..e1b657f7 100644 --- a/kdecore/io/kdebug.cpp +++ b/kdecore/io/kdebug.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -55,9 +56,9 @@ static QByteArray kDebugHeader(const QByteArray &areaname, const char* const fil QByteArray result(areaname); if (kde_debug_methodname) { result.append(" from "); - const QList funcnamelist = QByteArray(funcinfo).split(' '); + const QList funcinfolist = QByteArray(funcinfo).split(' '); bool foundfunc = false; - foreach (const QByteArray &it, funcnamelist) { + foreach (const QByteArray &it, funcinfolist) { if (it.contains('(') && it.contains(')')) { result.append(it); foundfunc = true; @@ -213,7 +214,40 @@ public: protected: qint64 writeData(const char* data, qint64 len) final { - // TODO: KDE_COLOR_DEBUG + static const bool kde_debug_color = !qgetenv("KDE_DEBUG_COLOR").isEmpty(); + if (kde_debug_color) { + static const bool isttyoutput = ( + m_level == QtDebugMsg ? ::isatty(::fileno(stdout)) : ::isatty(::fileno(stderr)) + ); + if (isttyoutput) { + switch (m_level) { + // for reference: + // https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit + case QtDebugMsg: { + ::fprintf(stdout, "\033[0;32m%s: %s\033[0m\n", m_header.constData(), data); + ::fflush(stdout); + break; + } + case QtWarningMsg: { + ::fprintf(stdout, "\033[0;93m%s: %s\033[0m\n", m_header.constData(), data); + ::fflush(stdout); + break; + } + case QtCriticalMsg: { + ::fprintf(stdout, "\033[0;33m%s: %s\033[0m\n", m_header.constData(), data); + ::fflush(stdout); + break; + } + case QtFatalMsg: { + ::fprintf(stdout, "\033[0;31m%s: %s\033[0m\n", m_header.constData(), data); + ::fflush(stdout); + break; + } + } + return len; + } + } + if (m_level == QtDebugMsg) { ::fprintf(stdout, "%s: %s\n", m_header.constData(), data); ::fflush(stdout); diff --git a/kdecore/io/kdebug.h b/kdecore/io/kdebug.h index 5d6b6762..4e86100b 100644 --- a/kdecore/io/kdebug.h +++ b/kdecore/io/kdebug.h @@ -30,12 +30,12 @@ * \addtogroup kdebug Debug message generators * @{ * KDE debug message streams let you and the user control just how many debug - * messages you see. Debug message can be controled by editing kdebugrc. - * - * You can also control what you see: process name, area name, method name, - * file and line number, timestamp, etc. using environment variables: - * KDE_DEBUG_TIMESTAMP - adds timestamp to the message - * KDE_DEBUG_METHODNAME - adds the method to the message + * messages you see. Debug message can be controled by editing kdebugrc and + * by setting or unsetting environment variables: + * KDE_DEBUG_TIMESTAMP - adds timestamp to the message + * KDE_DEBUG_METHODNAME - adds the method to the message + * KDE_DEBUG_COLOR - colorizes the message, valid only for shell type of + * output and when it is TTY */ /** diff --git a/kdecore/tests/kdebugtest.cpp b/kdecore/tests/kdebugtest.cpp index e9f4344b..d0408a11 100644 --- a/kdecore/tests/kdebugtest.cpp +++ b/kdecore/tests/kdebugtest.cpp @@ -57,7 +57,7 @@ void KDebugTest::cleanupTestCase() { ::unsetenv("KDE_DEBUG_METHODNAME"); ::unsetenv("KDE_DEBUG_TIMESTAMP"); - ::unsetenv("KDE_COLOR_DEBUG"); + ::unsetenv("KDE_DEBUG_COLOR"); } void KDebugTest::output_data() @@ -84,11 +84,11 @@ void KDebugTest::output() if (areafancy) { ::setenv("KDE_DEBUG_METHODNAME", "1", 1); ::setenv("KDE_DEBUG_TIMESTAMP", "1", 1); - ::setenv("KDE_COLOR_DEBUG", "1", 1); + ::setenv("KDE_DEBUG_COLOR", "1", 1); } else { ::unsetenv("KDE_DEBUG_METHODNAME"); ::unsetenv("KDE_DEBUG_TIMESTAMP"); - ::unsetenv("KDE_COLOR_DEBUG"); + ::unsetenv("KDE_DEBUG_COLOR"); } const QString areafilename = QFile::encodeName(KDEBINDIR "/123.log"); diff --git a/kdecore/util/qtest_kde.h b/kdecore/util/qtest_kde.h index 8298a6ec..4be8e210 100644 --- a/kdecore/util/qtest_kde.h +++ b/kdecore/util/qtest_kde.h @@ -79,7 +79,7 @@ int main(int argc, char *argv[]) \ setenv("KDEHOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test") ), 1); \ setenv("XDG_DATA_HOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test/xdg/local") ), 1); \ setenv("XDG_CONFIG_HOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test/xdg/config") ), 1); \ - unsetenv("KDE_COLOR_DEBUG"); \ + unsetenv("KDE_DEBUG_COLOR"); \ QFile::remove(QDir::homePath() + QString::fromLatin1("/.kde-unit-test/share/config/qttestrc")); \ KAboutData aboutData( QByteArray(componentName), QByteArray(), ki18n("KDE Test Program"), QByteArray("version") ); \ KComponentData cData(&aboutData); \ @@ -128,7 +128,7 @@ int main(int argc, char *argv[]) \ setenv("KDEHOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test" )), 1); \ setenv("XDG_DATA_HOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test/xdg/local") ), 1); \ setenv("XDG_CONFIG_HOME", QFile::encodeName( QDir::homePath() + QString::fromLatin1("/.kde-unit-test/xdg/config") ), 1); \ - unsetenv("KDE_COLOR_DEBUG"); \ + unsetenv("KDE_DEBUG_COLOR"); \ QFile::remove(QDir::homePath() + QString::fromLatin1("/.kde-unit-test/share/config/qttestrc")); \ KAboutData aboutData( QByteArray(componentName), QByteArray(), ki18n("KDE Test Program"), QByteArray("version") ); \ KComponentData cData(&aboutData); \ diff --git a/kdeui/tests/kmanagerselectiontest.cpp b/kdeui/tests/kmanagerselectiontest.cpp index 10e0270a..8e1c430f 100644 --- a/kdeui/tests/kmanagerselectiontest.cpp +++ b/kdeui/tests/kmanagerselectiontest.cpp @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) \ setenv("KDEHOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test") ), 1); \ setenv("XDG_DATA_HOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test/xdg/local") ), 1); \ setenv("XDG_CONFIG_HOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test/xdg/config") ), 1); \ - unsetenv("KDE_COLOR_DEBUG"); \ + unsetenv("KDE_DEBUG_COLOR"); \ QFile::remove(QDir::homePath() + QLatin1String("/.kde-unit-test/share/config/qttestrc")); \ KAboutData aboutData( QByteArray(componentName), QByteArray(), ki18n("KDE Test Program"), QByteArray("version") ); \ KCmdLineArgs::init( argc, argv, &aboutData); \ diff --git a/kdeui/tests/kstartupinfo_unittest.cpp b/kdeui/tests/kstartupinfo_unittest.cpp index 8f736777..19e27045 100644 --- a/kdeui/tests/kstartupinfo_unittest.cpp +++ b/kdeui/tests/kstartupinfo_unittest.cpp @@ -102,7 +102,7 @@ int main(int argc, char *argv[]) \ setenv("KDEHOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test") ), 1); \ setenv("XDG_DATA_HOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test/xdg/local") ), 1); \ setenv("XDG_CONFIG_HOME", QFile::encodeName( QDir::homePath() + QLatin1String("/.kde-unit-test/xdg/config") ), 1); \ - unsetenv("KDE_COLOR_DEBUG"); \ + unsetenv("KDE_DEBUG_COLOR"); \ QFile::remove(QDir::homePath() + QLatin1String("/.kde-unit-test/share/config/qttestrc")); \ KAboutData aboutData( QByteArray(componentName), QByteArray(), ki18n("KDE Test Program"), QByteArray("version") ); \ KCmdLineArgs::init( argc, argv, &aboutData); \ diff --git a/kdeui/tests/ktimezonewidget_unittest.cpp b/kdeui/tests/ktimezonewidget_unittest.cpp index 47ead34e..3d2fac1b 100644 --- a/kdeui/tests/ktimezonewidget_unittest.cpp +++ b/kdeui/tests/ktimezonewidget_unittest.cpp @@ -107,7 +107,6 @@ int main(int argc, char *argv[]) { setenv("LC_ALL", "C", 1); // The difference with QTEST_KDEMAIN is here: not setting $KDEHOME - unsetenv("KDE_COLOR_DEBUG"); KAboutData aboutData( "ktimezonewidgettest", 0, ki18n("qttest"), "version" ); KComponentData cData(&aboutData); QApplication app( argc, argv );