Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ikalnytskyi/termcolor
Termcolor is a header-only C++ library for printing colored messages to the terminal. Written just for fun with a help of the Force.
https://github.com/ikalnytskyi/termcolor
c-plus-plus colors console fancy linux macos terminal windows
Last synced: 23 days ago
JSON representation
Termcolor is a header-only C++ library for printing colored messages to the terminal. Written just for fun with a help of the Force.
- Host: GitHub
- URL: https://github.com/ikalnytskyi/termcolor
- Owner: ikalnytskyi
- License: other
- Created: 2013-12-27T23:02:23.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2024-08-08T19:58:47.000Z (3 months ago)
- Last Synced: 2024-10-02T18:09:39.675Z (about 1 month ago)
- Topics: c-plus-plus, colors, console, fancy, linux, macos, terminal, windows
- Language: C++
- Homepage: https://termcolor.readthedocs.io/
- Size: 269 KB
- Stars: 823
- Watchers: 27
- Forks: 129
- Open Issues: 10
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
Termcolor
=========.. image:: docs/_static/example.png
:alt: termcolor in action
:align: left.. -*- inclusion-marker-for-sphinx-docs -*-
Termcolor_ is a header-only C++ library for printing colored messages to the
terminal. Written just for fun with a help of `the Force`_. Termcolor uses
`ANSI color formatting`_, so you can use it on every system that is used such
terminals (most \*nix systems, including Linux and Mac OS)... note::
On Windows, `Windows API`_ is used instead of escape codes but some
limitations are applied (not everything is supported). That's why it's
recommended to enter `virtual terminal processing`_ mode and set
``TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES`` macro to trick termcolor to use
ANSI color codes... _virtual terminal processing: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
It's licensed under the BSD (3-clause) License. That basically means: do
whatever you want as long as copyright sticks around... _Termcolor: https://github.com/ikalnytskyi/termcolor
.. _the Force: https://starwars.wikia.com/wiki/The_Force
.. _ANSI color formatting: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
.. _Windows API: https://docs.microsoft.com/en-us/windows/console/setconsoletextattributeInstallation
------------* Add ``termcolor.hpp`` (grab it from ``include/termcolor/termcolor.hpp``) to
the project and use stream manipulators from the ``termcolor`` namespace.* You can also use vcpkg_ to install the library:
.. code:: sh
$ vcpkg install termcolor
.. _vcpkg: https://github.com/microsoft/vcpkg
* Or if you are on macOS, you can use Homebrew_ for that purpose:
.. code:: sh
$ brew install termcolor
.. _Homebrew: https://brew.sh/
* For up-to-date information about existing packages, refer to the the following
picture:.. image:: https://repology.org/badge/vertical-allrepos/termcolor.svg
:target: https://repology.org/project/termcolor/versions
:alt: Packaging StatusHow to use?
-----------It's very easy to use. The idea is built upon C++ stream manipulators.
Typical «Hello World» application looks like this:.. code:: c++
#include
#includeint main(int /*argc*/, char** /*argv*/)
{
std::cout << termcolor::red << "Hello, "; // 16 colors
std::cout << termcolor::color<100> << "Colorful "; // 256 colors
std::cout << termcolor::color<211, 54, 130> << "World!"; // true colors
std::cout << std::endl;
return 0;
}The application above prints a string using different colors. There is one
caveat though. You must not forget to reset colors, otherwise they will be
applied to other prints as well... code:: c++
std::cout << termcolor::red << "Hello, Colorful World!" << std::endl;
std::cout << "I'm RED too!" << std::endl;Correct version of the code above should look like this:
.. code:: c++
std::cout << termcolor::red << "Hello, Colorful World!" << termcolor::reset << std::endl;
std::cout << termcolor::reset << "Here I'm!" << std::endl;By default, Termcolor ignores any colors for non-tty streams (e.g.
``std::stringstream``), so the following snippet.. code:: c++
std::stringstream ss;
ss << termcolor::red << "unicorn";
std::cout << ss.str();will print «unicorn» using default color, not red. In order to change this
behaviour one can use ``termcolor::colorize`` manipulator that enforce colors
no matter what.What manipulators are supported?
--------------------------------The manipulators are divided into four groups:
* *foreground*, which changes text color;
* *background*, which changes text background color;
* *attributes*, which changes some text style (bold, underline, etc);
* *control*, which changes termcolor's behaviour.Also, there are color manipulators for `16 colors`_, `256 colors`_ and
`true colors`_ palettes... note::
While ``termcolor`` supports true color, it's required for the terminal
emulator you use to run your software to support true color too. So please
ensure it's supported before filing an issue... _16 colors: https://en.wikipedia.org/wiki/Color_depth#4-bit_color
.. _256 colors: https://en.wikipedia.org/wiki/Color_depth#8-bit_color
.. _true colors: https://en.wikipedia.org/wiki/Color_depth#True_color_(24-bit)Foreground manipulators
.......................16 colors
`````````#. ``termcolor::grey``
#. ``termcolor::red``
#. ``termcolor::green``
#. ``termcolor::yellow``
#. ``termcolor::blue``
#. ``termcolor::magenta``
#. ``termcolor::cyan``
#. ``termcolor::white``
#. ``termcolor::bright_grey``
#. ``termcolor::bright_red``
#. ``termcolor::bright_green``
#. ``termcolor::bright_yellow``
#. ``termcolor::bright_blue``
#. ``termcolor::bright_magenta``
#. ``termcolor::bright_cyan``
#. ``termcolor::bright_white``256 colors
``````````#. ``termcolor::color<256_COLOR_CODE>``
true colors
```````````#. ``termcolor::color``
Background manipulators
.......................16 colors
`````````#. ``termcolor::on_grey``
#. ``termcolor::on_red``
#. ``termcolor::on_green``
#. ``termcolor::on_yellow``
#. ``termcolor::on_blue``
#. ``termcolor::on_magenta``
#. ``termcolor::on_cyan``
#. ``termcolor::on_white``
#. ``termcolor::on_bright_grey``
#. ``termcolor::on_bright_red``
#. ``termcolor::on_bright_green``
#. ``termcolor::on_bright_yellow``
#. ``termcolor::on_bright_blue``
#. ``termcolor::on_bright_magenta``
#. ``termcolor::on_bright_cyan``
#. ``termcolor::on_bright_white``256 colors
``````````#. ``termcolor::on_color<256_COLOR_CODE>``
true colors
```````````#. ``termcolor::on_color``
Attribute manipulators
......................(Windows API does not support these manipulators except for ``underline``)
#. ``termcolor::bold``
#. ``termcolor::dark``
#. ``termcolor::italic``
#. ``termcolor::underline``
#. ``termcolor::blink``
#. ``termcolor::reverse``
#. ``termcolor::concealed``
#. ``termcolor::crossed``Control manipulators
....................(Windows API does not support these manipulators)
#. ``termcolor::colorize``
#. ``termcolor::nocolorize``Caveats
-------#. On Windows, due to internal usage of ````, global namespace could
be polluted with `min`/`max` macros. If such effect is desireable, please
consider using ``#define NOMINMAX`` before ``#include ``.