Node: Update terminal environment variables to detect colors

Created on 8 May 2019  路  26Comments  路  Source: nodejs/node

Right now we have a pretty decent list of environment variables to detect different terminals that support colors. However, it is often not exactly known from what version on these terminals actually support the colors, if that's detectable and how many colors these support.

I would like to start a list of different terminals / CIs and other things including their corresponding environment variables or other information to detect these and the information how many colors they support.

The current code can be found here: https://github.com/nodejs/node/blob/master/lib/internal/tty.js

A lot of information about terminals that support 16 million colors can be found here: https://github.com/termstandard/colors

Anyone can please check their terminal and post the name, version, corresponding env settings (not all) and the supported colors. This should be pretty straight forward and a good first contribution! The more information we gather here, the better Node.js will become in properly supporting colors.

Just enter the following in your terminal to check for true color:

printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"

Update: Please make sure you check what environment variables are set by your terminal! That is important since not all correspond to $TERM but some also to e.g., $TERM_PROGRAM. You can check what environment variables are set by running: node -e 'console.log(process.env)'. You have to check what environment variables correspond to the terminal. Please do not post any environment variables besides those.

good first issue help wanted tty

Most helpful comment

Hey is this issue still open
I would like to contribute

if you run env |grep TERM you can check if your terminal settings are covered in
test/pseudo-tty/test-tty-color-support.js

All 26 comments

VTE-based terminals should automatically export VTE_VERSION with the VTE version value (e.g. 5202 for v0.52.2).

However, other terminals like qterminal (which does support truecolor) don't set anything, not even COLORTERM currently.

Something else to keep in mind is that environment variables like these typically are not allowed to pass through on SSH connections.

@BridgeAR ,
May I give this a try? (I hope this only in Javascript code :) )

@rpgeeganage please go for it. It is all JS. This is mainly meant as a tracking issue.

@mscdex it's definitely not a fool prove solution. I tried very hard to come up with anything or find something but this seemed to be the best we can do so far. If there's any reliable alternative (even only to reliable detect a few terminals), we should go for that instead.

@BridgeAR
Thank you very much. I'll start working on it probably from tomorrow onward.

Can I give this a try ? :)

@3mard ,
Please go ahead, Thanks a lot.

Hello, Id like to give this a go as well, but I'm not entirely sure what is expected.

is it just as simple as adding my Terminal name to the TERM_ENVS object and the colors it supports?

@dlionz that is pretty much exactly what's required. We could also start a list here.

@BridgeAR, thanks for the quick response.

Ok, I'm using iTerm2, and I ran the script above printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"
and it returns 'TURECOLOR'. Here is also a screen cap of my terminal running this function from the docs above about terminal color.

Screen Shot 2019-05-15 at 3 14 18 PM

is this all that is needed?

@BridgeAR I went ahead and created this PR tty: add color support for iterm2 #27722 please let me know if there is anything I can do if there is an issue.

thanks,
Damien

@dlionz,
Your PR seems to be not following the contributing guideline. Can you please check it?

@rpgeeganage Yeah can do, just realized I did it wrong.

@rpgeeganage corrected my pr
tty: add color support for iterm2 #27723

I wanted to give it a shot to see if I could contribute in some way (my first time). I added my screenshot below of my terminal screen (using AWS - cloud9).

Screen Shot 2019-05-18 at 10 30 53 PM

@dmaynard51 please check what terminal you're using and what environment variables are set that correspond with the terminal.

I just updated the initial description to include some further information about the environment variables.

I just updated the initial description to include some further information about the environment variables.

Thank you, hopefully I am showing the correct information. Using the command above my term shows:
TERM: 'xterm-256color',

Also I ran a script like dlionz did above to show some color output.

color

I am using Hyper, version: 3.0.2. Some settings I think that are set by the terminal are:

COLORTERM: 'truecolor',
TERM_PROGRAM_VERSION: '3.0.2',
CHROME_DESKTOP: 'Hyper.desktop',
TERM: 'xterm-256color',
TERM_PROGRAM: 'Hyper'

Screenshot from 2019-05-29 21-30-23

It seems to support only 256 color. I would like to submit a little PR for this @BridgeAR.

I am using mintty 2.7.7 installed with Git for Windows

image

On Ubuntu 19.04,

my process.env =
VTE_VERSION: '5602',
TERM: 'xterm-256color',
COLORTERM: 'truecolor',

Screenshot from 2019-07-02 15-19-02

On MacOS terminal,

TERM: 'xterm-256color'

That is the only env variable that seems to correspond to the terminal.

The check for the (env.COLORTERM) should occur before the check for env.TERM
as env.TERM will allways give you a 256 colour terminal when it is a truecolor term
Should I add a pull request to fix @BridgeAR ?
it never reaches the code below as the prior if check will always?! return
if (env.COLORTERM) { if (env.COLORTERM === 'truecolor' || env.COLORTERM === '24bit') return COLORS_16m; return COLORS_16; }

Hey is this issue still open
I would like to contribute

Hey is this issue still open
I would like to contribute

if you run env |grep TERM you can check if your terminal settings are covered in
test/pseudo-tty/test-tty-color-support.js

On Ubuntu 18.04.3

COLORTERM=truecolor
TERM=xterm-256color
GNOME_TERMINAL_SERVICE=:1.122

COLORTERM:truecolor is covered in test/pseudo-tty/test-tty-color-support.js but TERM: xterm-256color is not covered.
Although TERM: xterm is in the file
Please confirm if I whould edit it

@sarthak0906 it is covered by TERM='xterm-256'. So there's no need to add another entry. Thanks a lot for checking your term settings!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

vsemozhetbyt picture vsemozhetbyt  路  3Comments

ksushilmaurya picture ksushilmaurya  路  3Comments

danialkhansari picture danialkhansari  路  3Comments

Brekmister picture Brekmister  路  3Comments

dfahlander picture dfahlander  路  3Comments