Comments (14)
@gelldur well, I come up with a solution. will implement it pretty soon.
from termcolor.
@stonier Hm.. Originally the idea was is to be protected from Unix pipes. For instance, if you run program that way -
$ ./my_program > out.txt
stdout
is not a tty, and ASCII characters won't get to output file (which is desired behaviour in most case).
However, I think we need to think how to avoid it and fix with std::stringstream
.
from termcolor.
Well I think we can do the following things:
- if stream is either
stdout
orstderr
and is notatty
-> strip ASCII escape sequences - otherwise - use them
In that case the case with redirection of standard io streams and having buffered string stream will be covered. However, I'm not very happy with such non obvious complexity. Need to think a bit more.
from termcolor.
Aha, I see.
Your logic sounds fine.
Though I do agree, with a stringstream you start moving into the realm of letting the user get himself into trouble (or not) and you cannot provide the protection there as he may eventually pipe that string out as you illustrated above.
Perhaps a better alternative is equipping the user with a tool that they can use to strip output from a termcolor enabled program? e.g.
$ ./my_program | strip_termcolor_sequences > out.txt
from termcolor.
@stonier We can't be sure such a tool will be widely distributed. I start thinking about explicit manipulator, like:
std::cout << termcolor::force << termcolor::red << "RED message" << termcolor::reset << std::endl;
Or maybe it's better to make force mode by default, and use tty mode to strip colors if output isn't tied with tty:
std::cout << termcolor::tty << termcolor::red << "RED message" << termcolor::reset << std::endl;
Anyway, thank you very much for raising an important concern! I'll try to come up with solution.
from termcolor.
The manipulator approach is interesting.
I would offer one perspective. For a user of a program that utilises this library, there are many ways of stripping colour codes if you wish (google for 'bash strip terminal color sequences'), but there is no way of re-inserting colour codes if the library/programmer has decided to strip them for you.
A good example is cmake output getting redisplayed in jenkins. If cmake had decided to strip sequences for logging, there would be no way I could utilise the AnsiColor Plugin to get the colours re-discovered in a jenkins log view.
from termcolor.
should at least fix the crash for now ;) even if its just assume its not a tty. Just need to handle get_standard_stream returning NULL. as for determining if a stream is a tty I suggest some ability to provide a user function to determine if it is
from termcolor.
@davidvanlaatum wow! nobody told be that there's a crash! it definitely needs to be fixed.
from termcolor.
yep fileno(NULL) goes boom at least on osx
from termcolor.
I'll prepare a fix and add test to CI for that case. Thanks a lot!
as for determining if a stream is a tty I suggest some ability to provide a user function to determine if it is
I agree on this. I'll add it very soon.
from termcolor.
Fixed segmentation fault in 519358f.
from termcolor.
Any updates on this :) ?
from termcolor.
@gelldur unfortunately didn't come up with a good solution. :( I'll think about it.
from termcolor.
Nice thx! Updating fork :)
from termcolor.
Related Issues (20)
- Include Error HOT 3
- Windows 10 Virtual Terminal Sequence Support HOT 1
- Tag a version HOT 1
- Fall back to no colors on unknown OSes
- Add support for std::clog HOT 2
- Intensity on Windows HOT 6
- Support for Gitbash on Windows HOT 1
- Expose is_colorized HOT 2
- Could you help using some open source license such as MIT or GPL? HOT 3
- #define min() and #define max() pollute global namespace by including termcolor.hpp HOT 4
- Control Characters on Windows Terminal HOT 1
- Wheel support for linux aarch64/x86 HOT 1
- Qt support HOT 3
- colorize_index has different values in different translation units HOT 1
- Add pkg-config integration.
- ANSI getting printed instead of colored text HOT 2
- Test for wchar_t
- Please publish new 2.0.1 / 2.1.0 release HOT 1
- fmt support? file descriptor support?
- does not play nicely with MSYS/MinGW shells
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from termcolor.