Merge topic 'stdio-no-color'

6aa604ef10 StdIo: Honor NO_COLOR environment variable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !10805
This commit is contained in:
Brad King
2025-05-21 12:28:39 +00:00
committed by Kitware Robot
6 changed files with 36 additions and 7 deletions

View File

@@ -9,11 +9,11 @@ Set to ``0`` to tell command-line tools not to print color
messages even if connected to a terminal.
This is a `common convention`_ among command-line tools in general.
See also the :envvar:`CLICOLOR_FORCE` environment variable.
:envvar:`CLICOLOR_FORCE`, if activated, takes precedence over
See also the :envvar:`NO_COLOR` and :envvar:`CLICOLOR_FORCE` environment
variables. If either of them is activated, it takes precedence over
:envvar:`!CLICOLOR`.
See the :variable:`CMAKE_COLOR_DIAGNOSTICS` variable to control
color in a generated build system.
.. _`common convention`: https://web.archive.org/web/20230417221418/https://bixense.com/clicolors/
.. _`common convention`: https://web.archive.org/web/20250410160803/https://bixense.com/clicolors/

View File

@@ -9,11 +9,12 @@ Set to a non-empty value, other than ``0``, to tell command-line
tools to print color messages even if not connected to a terminal.
This is a `common convention`_ among command-line tools in general.
See also the :envvar:`CLICOLOR` environment variable.
:envvar:`!CLICOLOR_FORCE`, if activated, takes precedence over
:envvar:`CLICOLOR`.
See also the :envvar:`NO_COLOR` and :envvar:`CLICOLOR` environment variables.
If :envvar:`NO_COLOR` is activated, it takes precedence over
:envvar:`!CLICOLOR_FORCE`. Otherwise, if :envvar:`!CLICOLOR_FORCE` is
activated, it takes precedence over :envvar:`CLICOLOR`.
See the :variable:`CMAKE_COLOR_DIAGNOSTICS` variable to control
color in a generated build system.
.. _`common convention`: https://web.archive.org/web/20230417221418/https://bixense.com/clicolors/
.. _`common convention`: https://web.archive.org/web/20250410160803/https://bixense.com/clicolors/

19
Help/envvar/NO_COLOR.rst Normal file
View File

@@ -0,0 +1,19 @@
NO_COLOR
--------
.. versionadded:: 4.1
.. include:: include/ENV_VAR.rst
Set to a non-empty value, other than ``0``, to tell command-line
tools not to print color messages even if connected to a terminal.
This is a `common convention`_ among command-line tools in general.
See also the :envvar:`CLICOLOR_FORCE` and :envvar:`CLICOLOR` environment
variables. If :envvar:`!NO_COLOR` is activated, it takes precedence
over both of them.
See the :variable:`CMAKE_COLOR_DIAGNOSTICS` variable to control
color in a generated build system.
.. _`common convention`: https://web.archive.org/web/20250410160803/https://bixense.com/clicolors/

View File

@@ -32,6 +32,7 @@ Environment Variables that Change Behavior
/envvar/CMAKE_PROGRAM_PATH
/envvar/CMAKE_TLS_VERIFY
/envvar/CMAKE_TLS_VERSION
/envvar/NO_COLOR
/envvar/SSL_CERT_DIR
/envvar/SSL_CERT_FILE

View File

@@ -101,6 +101,13 @@ void SetVT100Attrs(std::ostream& os, TermAttrSet const& attrs)
}
auto const TermEnv = []() -> cm::optional<TermKind> {
/* Disable color according to https://bixense.com/clicolors/ convention. */
if (cm::optional<std::string> noColor =
cmSystemTools::GetEnvVar("NO_COLOR")) {
if (!noColor->empty() && *noColor != "0"_s) {
return TermKind::None;
}
}
/* Force color according to https://bixense.com/clicolors/ convention. */
if (cm::optional<std::string> cliColorForce =
cmSystemTools::GetEnvVar("CLICOLOR_FORCE")) {

View File

@@ -29,6 +29,7 @@ if(NOT CTEST_CONFIGURATION_TYPE)
endif()
# Isolate tests from user configuration in the environment.
unset(ENV{NO_COLOR})
unset(ENV{CLICOLOR})
unset(ENV{CLICOLOR_FORCE})
unset(ENV{CMAKE_GENERATOR})