Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is this \u001b[9... syntax of choosing what color text appears on console, and how can I add more colors?

I was messing around with debug and colors.js to get more colors than the limited 4-6 colors but I'm stuck at figuring out this coloring syntax

args[0] = ' \u001b[9' + c + 'm' + name + ' '
  + '\u001b[3' + c + 'm\u001b[90m'
  + args[0] + '\u001b[3' + c + 'm'
  + ' +' + exports.humanize(ms) + '\u001b[0m';
'blue' : ['\x1B[34m', '\x1B[39m'],
'cyan' : ['\x1B[36m', '\x1B[39m'],
'green' : ['\x1B[32m', '\x1B[39m'],
'magenta' : ['\x1B[35m', '\x1B[39m'],
'red' : ['\x1B[31m', '\x1B[39m'],
'yellow' : ['\x1B[33m', '\x1B[39m'],

I know windows console allows more colors than just those six, as color /? shows

0 = Black       8 = Gray
1 = Blue        9 = Light Blue
2 = Green       A = Light Green
3 = Aqua        B = Light Aqua
4 = Red         C = Light Red
5 = Purple      D = Light Purple
6 = Yellow      E = Light Yellow
7 = White       F = Bright White

How do I go about understanding this syntax and adding the extra colors that windows has to offer?

like image 357
laggingreflex Avatar asked Jun 01 '14 00:06

laggingreflex


1 Answers

Those are ANSI terminal escape codes. Specifically, they're "select graphic rendition" (SGR) escape codes, which consist of:

  • the "command sequence introducer", consisting of the characters \x1B (ESC) and [,
  • one or more numeric commands, separated by semicolons, and
  • the letter m, ending the code and indicating that this is an SGR code.

There are many possible numeric commands (and many other escape codes besides SGR), but the most relevant ones are:

  • 30–37: set text color to one of the colors 0 to 7,
  • 40–47: set background color to one of the colors 0 to 7,
  • 39: reset text color to default,
  • 49: reset background color to default,
  • 1: make text bold / bright (this is the standard way to access the bright color variants),
  • 22: turn off bold / bright effect, and
  • 0: reset all text properties (color, background, brightness, etc.) to their default values.

Thus, for example, one could select bright purple text on a green background (eww!) with the code \x1B[35;1;42m.

like image 158
Ilmari Karonen Avatar answered Sep 26 '22 15:09

Ilmari Karonen