From bb9cedb0f07c4f74cada172845f2aea197efa456 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Tue, 16 Jan 2018 13:20:13 +0100 Subject: [PATCH] tty: add getColorDepth function Right now it is very difficult to determine if a terminal supports colors or not. This function adds this functionality by detecting environment variables and checking process. PR-URL: https://github.com/nodejs/node/pull/17615 Reviewed-By: James M Snell Reviewed-By: Matteo Collina --- doc/api/assert.md | 3 + doc/api/tty.md | 26 ++++++++ lib/internal/errors.js | 23 ++++++-- lib/tty.js | 72 +++++++++++++++++++++++ test/parallel/test-assert.js | 9 ++- test/parallel/test-tty-get-color-depth.js | 52 ++++++++++++++++ 6 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 test/parallel/test-tty-get-color-depth.js diff --git a/doc/api/assert.md b/doc/api/assert.md index 7d07fbbf0c1..339351db8b2 100644 --- a/doc/api/assert.md +++ b/doc/api/assert.md @@ -65,6 +65,9 @@ AssertionError [ERR_ASSERTION]: Input A expected to deepStrictEqual input B: ] ``` +To deactivate the colors, use the `NODE_DISABLE_COLORS` environment variable. +Please note that this will also deactivate the colors in the REPL. + ## Legacy mode > Stability: 0 - Deprecated: Use strict mode instead. diff --git a/doc/api/tty.md b/doc/api/tty.md index 8b757c0f027..ce6dbae8fa6 100644 --- a/doc/api/tty.md +++ b/doc/api/tty.md @@ -121,6 +121,32 @@ added: v0.7.7 A `number` specifying the number of rows the TTY currently has. This property is updated whenever the `'resize'` event is emitted. +### writeStream.getColorDepth([env]) + + +* `env` {object} A object containing the environment variables to check. + Defaults to `process.env`. +* Returns: {number} + +Returns: +* 1 for 2, +* 4 for 16, +* 8 for 256, +* 24 for 16,777,216 +colors supported. + +Use this to determine what colors the terminal supports. Due to the nature of +colors in terminals it is possible to either have false positives or false +negatives. It depends on process information and the environment variables that +may lie about what terminal is used. +To enforce a specific behavior without relying on `process.env` it is possible +to pass in an object with different settings. + +Use the `NODE_DISABLE_COLORS` environment variable to enforce this function to +always return 1. + ## tty.isatty(fd)