Questions Concerning colorizing text in Ubuntu terminal.
-
Hello,
I am asking for help in directing me to the correct forum for my questions.
I have a Qt5 program that accesses a Ubuntu terminal, all the text is white.
I also have this program in Perl, see pic.
I was hoping someone could help me with my questions about colorizing the text in terminal in Qt5. See pic.
Any help would be appreciated!
Thanks! -
-
Thank you! Here is a snippet of the Perl code that colorizes the terminal.
# color codes for fancy terminal output (not to file) $type = "\e[1m\e[91m$type\e[0m" if ($type =~ m/(fatal|fail|error|stop)/i);# bold red $type = "\e[91m$type\e[0m" if ($type =~ m/(refused|nodevice|timeout)/i); # red $type = "\e[93m$type\e[0m" if ($type =~ m/(reset|warning|secure|unset)/i);# yellow $type = "\e[95m$type\e[0m" if ($type =~ m/(add|update|delete)/i); # magenta $type = "\e[96m$type\e[0m" if ($type =~ m/(list|uplink)/i); # cyan $type = "\e[94m$type\e[0m" if ($type =~ m/(beacon|syncer)/i); # blue $type = "\e[92m$type\e[0m" if ($type =~ m/(stat|kfnew)/i); # green $type = "\e[1m\e[92m$type\e[0m" if ($type =~ m/(info|debug)/i); # bold green
I was hoping Qt5 would be as easy as this.
Thanks for helping! -
Hi,
AFAIK, you can pass these sequences to qDebug and they will be shown colorized on your terminal.
The syntax will be a bit different for the if parts though.
-
Thanks!
I searched, "Passing sequences in qDebug" , got nothing.Perl $type = "\e[91m$type\e[0m" if ($type =~ m/(refused|nodevice|timeout)/i); # red Qt5 printf("\\x1B[31mTexting\\033[0m\\t\\t");\line
With both of those lines I can see the color will be red.
With Perl I can see the words that will be highlighted red. (refused|nodevice|timeout)
With Qt5 I have no idea what text is going to be highlighted.
I'm hoping someone can help me with the Qt5 line with setting it up to highlight the text like in Perl. This is for Ubuntu.
Thanks! -
The same way you are doing with Perl: using regulate expression.
There are other possibilities like simple string search.
Up to you to benchmark what works best for your use case.
-
Thank you very much!
Also I read this, "Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct".
But there was no box or a way to mark as read so I see it everywhere like I am suppost to read it again, is that normal or am I missing something?I hope I am on to something that will work!
text { text: "(refused|nodevice|timeout)" font.family: "Courier New" font.pointSize: 12 color: "red" }
-
Amin, if this is against forum rules please delete!
After trying to get this to work I realize I'm too old, blind, deaf, with bad health to do this.
I would be willing to pay someone via PayPal to help me get this to work.
If interested please contact me at wpt1114 at yahoo.com to discuss the details.
Thanks! -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
After trying to get this to work I realize I'm too old, blind, deaf, with bad health to do this.
Sorry to hear that. Do you mean you just want to translate the 10 lines of Perl code you wrote above to C++/Qt? I will post that for you if that's what you want (no charge!). But if you want someone to do your whole project please say so, because that's not me.
I hope I am on to something that will work!
Your code here looks like Qt's QML? Is that what you want to use, because again that's not me, or are you wanting a Qt widgets application?
-
All I need is this;
#include "whatever file is/if needed!" #include "whatever file is/if needed!" ( line of code or what's needed) [Rewrite the following Perl into C++/Qt.] { { "$type = "\e[1m\e[91m$type\e[0m" if ($type =~ m/(fatal|fail|error|stop)/i);# bold red" "$type = "\e[91m$type\e[0m" if ($type =~m/(refused|nodevice|timeout)/i); # red" } }
The Qt5 code written completely that would replace the Perl lines of code above that highlights those 4 words in Bold Red and those 3 words in Red in a ubuntu terminal.
Once I have those 4 + 3 words highlighted in Bold Red and Red in terminal working, I can add the other words and colors to the file.
I hope I explained it for you.JonB, thank you for offering to rewrite all 10 Perl lines into C++/Qt5 for me at no charge. Really, thank you so very much!
But if you could do just those two lines, then I can finish it and learn a little!
Again Thanks! -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
Amin, if this is against forum rules please delete!
It's a banner shown to everybody, you did nothing wrong.
From the top of my head something as below:.
WARNING THIS IS WRONG AND LEFT FOR EDUCATIONAL PURPOSE #include <QRegularExpression> void printColorized(const QString& text) { QString toPrint; if (text.contains(QRegularExpression("(fatal|fail|error|stop)")) { toPrint = QString("\e[1m\e[91m%1\e[0m").arg(text); } if (text.contains(QRegularExpression("(refused|nodevice|timeout)"))) { toPrint = QString("\e[91m%1\e[0m").arg(text); } qDebug() << toPrint; }
Here is the correct way to trigger the colorization of the terminal manually:
#include <QRegularExpression> #include <QCoreApplication> #include <QString> #include <QtDebug> void printColorized(const QString& text) { if (text.contains(QRegularExpression("(fatal|fail|error|stop)"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m"; } if (text.contains(QRegularExpression("(refused|nodevice|timeout)"))) { qDebug() << "\e[91m" << text << "\e[0m"; } }
[add fixed version as the original will just print the QString content SGaist]
-
After several tries with using the code above, I have had no success in getting it to work.
More info about my project.
My friend Tim is the true genius in this. I'm just an old man. It is his Perl and Qt code.
He is so busy with work, school and family, 25 hours a day, 8 days a week!
I was hoping to surprise him with getting the color text working in the terminal.
I told him what I was doing and he told me the reason he did not pursue the color text in Qt was because the color text in Perl messed with his log files, besides I am the one who misses the color text.
Here is links to the masterserver website and qt5 source code.
http://333networks.com/
http://git.333networks.com/MasterServer-Qt5/
Tim suggested I write a "Hello World" project implementing color text.
If anyone has or knows of any links to "Hello World" examples with text in color using Qt Creator please post.
He said he was not sure if Qt supports color text in terminal output like Perl does.
I will keep at this besides it gives me something to do, it's all for kicks and giggles for me.
I wish I had 5 years to take a course to learn all of this or a personal instructor to teach me.
If anyone feels I owe them please contact me through my email above.
Thanks for all those who helped!
My desk,
If interested my masterserver website:
gonespy.com! -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
I have had no success in getting it to work
Can you show the code?
I think you need to escape the \
Like:if (text.contains(QRegularExpression("(fatal|fail|error|stop)")) { toPrint = QString("\\e[1m\\e[91m%1\\e[0m").arg(text);
-
@jsulm said in Questions Concerning colorizing text in Ubuntu terminal.:
I think you need to escape the \
toPrint = QString("\\e[1m\\e[91m%1\\e[0m").arg(text);
I don't think so :) It takes a brave man to challenge @SGaist, especially if he has typed in code inside backticks. But here he is right. You do not want
"\\e"
here, to deliver a literal\e
. What you want is the C++ literal for "escape character" (ANSI sequences are all escape-[
-....)\e
=\x1B
= escape (non-standard GCC extension)Seems like it's a GCC non-standard though, because I had never seen it before;
\x1B
(or\033
) is the portable version.... -
@jsulm said in Questions Concerning colorizing text in Ubuntu terminal.:
Can you show the code?
Here is a link to download masterserver Qt5 and/or view all the cpp and h files.
http://git.333networks.com/MasterServer-Qt5/commit/ -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
Is there a way to mark as read so no more banner?
No, it's a site wide banner.
-
Here is a fixed version of my original idea:
#include <QRegularExpression> #include <QCoreApplication> #include <QString> #include <QtDebug> void printColorized(const QString& text) { if (text.contains(QRegularExpression("(fatal|fail|error|stop)"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m"; } else if (text.contains(QRegularExpression("(refused|nodevice|timeout)"))) { qDebug() << "\e[91m" << text << "\e[0m"; } } int main(int argc, char **argv) { QCoreApplication app(argc, argv); printColorized("fatal"); printColorized("there is nodevice"); return 0; }