Conversation
| if (startPos < text.count()) | ||
| outputTextBrowser->textCursor().insertText(text.mid(startPos), format); | ||
| }); | ||
|
|
There was a problem hiding this comment.
If you hooked this to output text browser's insert signal or w/e then ANSI escapes would be colored for all plugins instead of just the server plugin. Also we may want an option to disable ANSI later and I'm not sure how granular such an option should be, I think Visual Studio has one to disable its color output.
| QList<Utils::FormattedText> txts = ansiHandler.parseText(QString::fromStdString(log.message() + "\n")); | ||
| for (auto& str : txts) { | ||
| emit LogOutput(str.text, str.format); | ||
| } |
There was a problem hiding this comment.
This ANSI escape stuff itself could have been made a plugin and more loosely coupled but I suppose that might be overkill.
There was a problem hiding this comment.
Actually I guess this is fine because now all plugins have ability to log formatted output of their own.
|
|
||
| static QColor ansiColor(uint code) | ||
| { | ||
| if (code < 8) return QColor(); |
There was a problem hiding this comment.
Use R_EXPECT here, albeit this tightly couples this component with the rest of our code base making it harder to pull updates to this source from Qt again.
Line 29 in b3cc0ac
Rather than change this source, what we could do actually is wrap QTC_ASSERT to R_EXPECT so we can easily pull updated versions of this source in the future.
| // strippedText always starts with "\e[" | ||
| QString strippedText = input.text.mid(escapePos); | ||
| while (!strippedText.isEmpty()) { | ||
| while (strippedText.startsWith(escape)) { |
There was a problem hiding this comment.
Looks like you dropped two other asserts from the original here.
https://github.com/qt-creator/qt-creator/blob/fc9bdf1255741f9261572d8560c6d8d1def76828/src/libs/utils/ansiescapecodehandler.cpp#L95
https://github.com/qt-creator/qt-creator/blob/fc9bdf1255741f9261572d8560c6d8d1def76828/src/libs/utils/ansiescapecodehandler.cpp#L104
Also, I like how QTC_ASSERT accepts break as an argument, we should do that maybe.
There was a problem hiding this comment.
I think i just used older version
|
|
||
| // \e[K is not supported. Just strip it. | ||
| if (strippedText.startsWith(eraseToEol)) { | ||
| strippedText.remove(0, 1); |
There was a problem hiding this comment.
If you comment out just this single line (not the continue!) you will see the letter k on both sides of text that you would expect to be colored. That means GCC is coloring its output using specific ANSI escapes which this ANSI escape handler does not support. That is why color output is still not working while it is correctly bold and such.
|
Ok after some testing, I don't have any idea how Qt Creator manages to keep the view at the bottom without applying the text cursor like I do above. It seems like they do somewhere for the "Compile Output" window in Qt Creator but I can't find where. However, I dislike doing it this way because this is how LGM did it, and it doesn't let you scroll up at all while output is coming (very annoying!). I like the behavior of This is much closer to how a terminal actually behaves and in fact is exactly what my testing shows in MSYS2 for me. |
|
If fundies insists, Robert, let him use this. I think it's ugly as stop-gaps go, but it'll work. Another alternative is this library: https://github.com/theZiz/aha/blob/master/aha.c Seems we could copy-paste that instead. It's MPL-licensed, which is closer to LGPL. It might support that weird |
|
That weird |
No description provided.