Fix check of color support on Windows

If the stream is redirected, the script should behave the same on Windows
and on POSIX systems.
This commit is contained in:
Michele Locati 2018-03-20 15:40:39 +01:00
parent a1be12e290
commit f7f81892a0
No known key found for this signature in database
GPG Key ID: 98B7CE2E7234E28B

View File

@ -81,17 +81,26 @@ class StreamOutput extends Output
*
* Colorization is disabled if not supported by the stream:
*
* - Windows != 10.0.10586 without Ansicon, ConEmu or Mintty
* - the stream is redirected (eg php file.php >log)
* - Windows without VT100 support, Ansicon, ConEmu, Mintty
* - non tty consoles
*
* @return bool true if the stream supports colorization, false otherwise
*/
protected function hasColorSupport()
{
if (function_exists('stream_isatty') && !@stream_isatty($this->stream)) {
return false;
}
if (DIRECTORY_SEPARATOR === '\\') {
if (function_exists('sapi_windows_vt100_support')) {
$vt100Enabled = @sapi_windows_vt100_support($this->stream);
} else {
$vt100Enabled = '10.0.10586' === PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD;
}
return
function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support($this->stream)
|| '10.0.10586' === PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD
$vt100Enabled
|| false !== getenv('ANSICON')
|| 'ON' === getenv('ConEmuANSI')
|| 'xterm' === getenv('TERM');