From 70db2c02537d0ccde65368a69a2e038fcf5c111d Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Thu, 31 Mar 2016 17:27:25 +0200 Subject: [PATCH 1/5] Detect CLI color support for Windows 10 build 10586 Newer Windows 10 versions (builds older than 10586) offer VT100 color support. See http://www.nivot.org/blog/post/2016/02/04/Windows-10-TH2-(v1511)-Console-Host-Enhancements --- .../Component/Console/Output/StreamOutput.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Output/StreamOutput.php b/src/Symfony/Component/Console/Output/StreamOutput.php index 62d04c0e0d966..ee0486b9101f3 100644 --- a/src/Symfony/Component/Console/Output/StreamOutput.php +++ b/src/Symfony/Component/Console/Output/StreamOutput.php @@ -85,7 +85,7 @@ protected function doWrite($message, $newline) * * Colorization is disabled if not supported by the stream: * - * - Windows without Ansicon, ConEmu or Mintty + * - Windows before 10.0.10586 without Ansicon, ConEmu or Mintty * - non tty consoles * * @return bool true if the stream supports colorization, false otherwise @@ -93,7 +93,16 @@ protected function doWrite($message, $newline) protected function hasColorSupport() { if (DIRECTORY_SEPARATOR === '\\') { - return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); + return + defined('PHP_WINDOWS_VERSION_MAJOR') + && + version_compare( + PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, + '10.0.10586' + ) >= 0 + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM'); } return function_exists('posix_isatty') && @posix_isatty($this->stream); From 1ab5544835d0c3a83e7b179c1757ccf444109374 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 1 Apr 2016 16:59:50 +0200 Subject: [PATCH 2/5] Detect CLI color support for Windows 10 build 10586 Newer Windows 10 versions (builds older than 10586) offer VT100 color support. See http://www.nivot.org/blog/post/2016/02/04/Windows-10-TH2-(v1511)-Console-Host-Enhancements --- .../Bridge/PhpUnit/DeprecationErrorHandler.php | 11 ++++++++++- src/Symfony/Component/VarDumper/Dumper/CliDumper.php | 12 +++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php index 390c4909dcc02..b76b2c489f282 100644 --- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php +++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php @@ -194,7 +194,16 @@ public static function register($mode = 0) private static function hasColorSupport() { if ('\\' === DIRECTORY_SEPARATOR) { - return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); + return + defined('PHP_WINDOWS_VERSION_MAJOR') + && + version_compare( + PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, + '10.0.10586' + ) >= 0 + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM'); } return defined('STDOUT') && function_exists('posix_isatty') && @posix_isatty(STDOUT); diff --git a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php index 83e79c184be32..caef9f0547e2e 100644 --- a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php @@ -452,7 +452,17 @@ protected function supportsColors() } if ('\\' === DIRECTORY_SEPARATOR) { - static::$defaultColors = @(false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM')); + static::$defaultColors = @( + defined('PHP_WINDOWS_VERSION_MAJOR') + && + version_compare( + PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, + '10.0.10586' + ) >= 0 + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM') + ); } elseif (function_exists('posix_isatty')) { $h = stream_get_meta_data($this->outputStream) + array('wrapper_type' => null); $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream; From 5530fac25135a3a393ee2a774172274cb367ebb6 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 1 Apr 2016 17:27:49 +0200 Subject: [PATCH 3/5] Use only 16 colors when using standard Windows 10 VT100 commands --- src/Symfony/Component/VarDumper/Dumper/CliDumper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php index caef9f0547e2e..5c219a01f3200 100644 --- a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php @@ -58,8 +58,8 @@ public function __construct($output = null, $charset = null, $flags = 0) { parent::__construct($output, $charset, $flags); - if ('\\' === DIRECTORY_SEPARATOR && false !== @getenv('ANSICON')) { - // Use only the base 16 xterm colors when using ANSICON + if ('\\' === DIRECTORY_SEPARATOR && 'ON' !== @getenv('ConEmuANSI') && 'xterm' !== @getenv('TERM')) { + // Use only the base 16 xterm colors when using ANSICON or standard Windows 10 CLI $this->setStyles(array( 'default' => '31', 'num' => '1;34', From 6e676c4baf7f22d6ea71d6745685ac0d21659f92 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 1 Apr 2016 19:36:33 +0200 Subject: [PATCH 4/5] Don't check if PHP_WINDOWS_VERSION_MAJOR is defined if directory separator is \ --- src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php | 2 -- src/Symfony/Component/Console/Output/StreamOutput.php | 2 -- src/Symfony/Component/VarDumper/Dumper/CliDumper.php | 2 -- 3 files changed, 6 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php index b76b2c489f282..0233c3b409731 100644 --- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php +++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php @@ -195,8 +195,6 @@ private static function hasColorSupport() { if ('\\' === DIRECTORY_SEPARATOR) { return - defined('PHP_WINDOWS_VERSION_MAJOR') - && version_compare( PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, '10.0.10586' diff --git a/src/Symfony/Component/Console/Output/StreamOutput.php b/src/Symfony/Component/Console/Output/StreamOutput.php index ee0486b9101f3..31b00bb11efaf 100644 --- a/src/Symfony/Component/Console/Output/StreamOutput.php +++ b/src/Symfony/Component/Console/Output/StreamOutput.php @@ -94,8 +94,6 @@ protected function hasColorSupport() { if (DIRECTORY_SEPARATOR === '\\') { return - defined('PHP_WINDOWS_VERSION_MAJOR') - && version_compare( PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, '10.0.10586' diff --git a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php index 5c219a01f3200..d0a1ea9dddd1f 100644 --- a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php @@ -453,8 +453,6 @@ protected function supportsColors() if ('\\' === DIRECTORY_SEPARATOR) { static::$defaultColors = @( - defined('PHP_WINDOWS_VERSION_MAJOR') - && version_compare( PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, '10.0.10586' From a226d77b22e01d0edd031aee7906173516206bc1 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 1 Apr 2016 19:41:59 +0200 Subject: [PATCH 5/5] Windows 10 version check in just one line --- src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php | 5 +---- src/Symfony/Component/Console/Output/StreamOutput.php | 5 +---- src/Symfony/Component/VarDumper/Dumper/CliDumper.php | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php index 0233c3b409731..15a2787992953 100644 --- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php +++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php @@ -195,10 +195,7 @@ private static function hasColorSupport() { if ('\\' === DIRECTORY_SEPARATOR) { return - version_compare( - PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, - '10.0.10586' - ) >= 0 + 0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD) || false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); diff --git a/src/Symfony/Component/Console/Output/StreamOutput.php b/src/Symfony/Component/Console/Output/StreamOutput.php index 31b00bb11efaf..098966286eeb5 100644 --- a/src/Symfony/Component/Console/Output/StreamOutput.php +++ b/src/Symfony/Component/Console/Output/StreamOutput.php @@ -94,10 +94,7 @@ protected function hasColorSupport() { if (DIRECTORY_SEPARATOR === '\\') { return - version_compare( - PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, - '10.0.10586' - ) >= 0 + 0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD) || false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); diff --git a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php index d0a1ea9dddd1f..ca18eca2121fb 100644 --- a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php @@ -453,10 +453,7 @@ protected function supportsColors() if ('\\' === DIRECTORY_SEPARATOR) { static::$defaultColors = @( - version_compare( - PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD, - '10.0.10586' - ) >= 0 + 0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD) || false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM')