Color Up Arbitrary Command Output
colout is a simple command to add colors to a text stream in your terminal.
The colout
command line interface has been carefully designed to be simple. Basically, you will call it like: <text
stream> | colout <pattern to color> [color [style]]
colout has the ability to use 8 colors mode, 256 colors mode, colormaps, themes and source code syntax coloring. Patterns are regular expressions.
You can think of colout as an alternative to grep --color
which will preserve the surrounding context, whith more
powerful coloring capabilites.
In the most simple use, you just have to call colout word
to highlight what you want to spot in a text stream. This is
particularly useful when examining logs.
Color every occurence of the word "fail" in bold red, in the boot log:
tail /var/log/boot.log | colout fail
Using regular expressions, you can highlight anything you want in a text stream.
Color every line containing the word "fail" in bold red, in the boot log:
tail /var/log/boot.log | colout "^.*fail.*$" red bold
Color in blue the user name of the ps
output that have been greped:
ps aux | grep firefox | colout "^\w+\s" blue
Using groups in the regular expressions, you can highlight several matchs in different colors.
Highlight the different parts of the permissions of files in your home directories, that are rwx
for user and group,
but r-x
for others:
ls -l ~ | colout "^(d*)-*(rwx)(rwx)(r-x)" blue,red,yellow,green
Using colormaps, you can change the colors for each lines
Predefined colormaps are particularly useful for reading logs that have long lines that are wrapped.
tail /var/log/kern.log | colout "^.*$" rainbow
But you can also create your own colormap, using the -c
switch, for example to alternate two colors:
tail /var/log/kern.log | colout -c "^.*$" blue,yellow normal
If you prefer a rainbow with more colors, just use an upper-case R. For example to color a progress bar:
echo "Progress [########################] 100%" | colout "#" Rainbow
If you want even more colors, you can highlight each line of your log with a random one among the 256 ANSI colors:
tail /var/log/dmesg | colout "^.*$" Random
You can color numbers according to their value on a linear scale:
cmake .. && make 2>&1 | colout --scale 0,100 "\[(.*)%\]" scale
You can even fill your screen with esoteric disco characters (not that useful, but fun):
cat /dev/urandom | colout "." Random
You can load extern palettes as colormaps. colout supports the GIMP Palette format (*.gpl, used by GIMP and inkscape, for instance) and will translate them from their RGB values to their nearest ANSI colors (which may thus contains fewer colors than the orginal RGB palette).
sudo apt-get update | colout -P /usr/share/gimp/2.0/palettes/ "^.*$" Firecode
You can use colout as a basic proxy to the pygments library, if you want to highlight a source code.
For example, let say you want to have a quick look at a source file, without being bothered by comments and empty lines:
tail colout.py | grep -v "#" | grep -v "^\s*$" | colout -s Python monokai
But even more interesting, you can highlight the syntax of the matching parts of your text stream, which is useful for spotting code in a log.
For example, color the code parts in the output of g++
(they come inside single quotes):
make 2>&1 | colout "'.*'" Cpp vim
colout comes with a set of handy shortcuts for coloring common outputs.
For example, if you often build your software with cmake
but find its coloring scheme a bit boring, you can use the
following shortcut:
make 2>&1 | colout -t cmake
You can, of course, combine several calls to colout using pipes:
make 2>&1 | colout -t cmake | colout -t g++
To be able to use the syntax highlighting, you should install the python-pygments
library.
colout -r
will give you the lists of available colors, colormaps, themes and supported programming languages.
Colormaps and source code syntax highlighting most often comes in 8 or 256 colors mode. Use a lower case first letter for the 8 colors mode and an upper case first one for the 256 colors.
The 8 colors mode syntax highlighting only comes in two styles: light and dark. If you want more fancy styles, you should use 256 colors mode, and thus upper case the first letter of the language name, or else the style is ignored.
You can leave simple words without quotes, but it is better to put the regexp in quotes to avoid escaping special characters that would overwise be interpreted by your shell (like parenthesis).
Do not hesitate to design your own theme, they are defined as separated files, and basically are just like chaining several calls to colout in pipes, with the possibility to use python code around.
Don't use nested groups or colout will duplicate the corresponding input text with each matching colors.