Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Console.php

class Console

Hierarchy

  • class \SebastianBergmann\Environment\Console

Expanded class hierarchy of Console

2 files declare their use of Console
Help.php in vendor/phpunit/phpunit/src/TextUI/Help.php
Merger.php in vendor/phpunit/phpunit/src/TextUI/Configuration/Merger.php
4 string references to 'Console'
FirebugConsoleSniff::process in vendor/squizlabs/php_codesniffer/src/Standards/MySource/Sniffs/Debug/FirebugConsoleSniff.php
Processes this test, when one of its tokens is encountered.
_register.php in vendor/open-telemetry/sdk/Metrics/MetricExporter/_register.php
_register.php in vendor/open-telemetry/sdk/Trace/SpanExporter/_register.php
_register.php in vendor/open-telemetry/sdk/Logs/Exporter/_register.php

File

vendor/sebastian/environment/src/Console.php, line 32

Namespace

SebastianBergmann\Environment
View source
final class Console {
    
    /**
     * @var int
     */
    public const STDIN = 0;
    
    /**
     * @var int
     */
    public const STDOUT = 1;
    
    /**
     * @var int
     */
    public const STDERR = 2;
    
    /**
     * Returns true if STDOUT supports colorization.
     *
     * This code has been copied and adapted from
     * Symfony\Component\Console\Output\StreamOutput.
     */
    public function hasColorSupport() : bool {
        if ('Hyper' === getenv('TERM_PROGRAM')) {
            return true;
        }
        if ($this->isWindows()) {
            // @codeCoverageIgnoreStart
            return defined('STDOUT') && function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT) || false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM');
            // @codeCoverageIgnoreEnd
        }
        if (!defined('STDOUT')) {
            // @codeCoverageIgnoreStart
            return false;
            // @codeCoverageIgnoreEnd
        }
        return $this->isInteractive(STDOUT);
    }
    
    /**
     * Returns the number of columns of the terminal.
     *
     * @codeCoverageIgnore
     */
    public function getNumberOfColumns() : int {
        if (!$this->isInteractive(defined('STDIN') ? STDIN : self::STDIN)) {
            return 80;
        }
        if ($this->isWindows()) {
            return $this->getNumberOfColumnsWindows();
        }
        return $this->getNumberOfColumnsInteractive();
    }
    
    /**
     * Returns if the file descriptor is an interactive terminal or not.
     *
     * Normally, we want to use a resource as a parameter, yet sadly it's not always available,
     * eg when running code in interactive console (`php -a`), STDIN/STDOUT/STDERR constants are not defined.
     *
     * @param int|resource $fileDescriptor
     */
    public function isInteractive($fileDescriptor = self::STDOUT) : bool {
        if (is_resource($fileDescriptor)) {
            if (function_exists('stream_isatty') && @stream_isatty($fileDescriptor)) {
                return true;
            }
            if (function_exists('fstat')) {
                $stat = @fstat(STDOUT);
                return $stat && 020000 === ($stat['mode'] & 0170000);
            }
            return false;
        }
        return function_exists('posix_isatty') && @posix_isatty($fileDescriptor);
    }
    private function isWindows() : bool {
        return DIRECTORY_SEPARATOR === '\\';
    }
    
    /**
     * @codeCoverageIgnore
     */
    private function getNumberOfColumnsInteractive() : int {
        if (function_exists('shell_exec') && preg_match('#\\d+ (\\d+)#', shell_exec('stty size') ?: '', $match) === 1) {
            if ((int) $match[1] > 0) {
                return (int) $match[1];
            }
        }
        if (function_exists('shell_exec') && preg_match('#columns = (\\d+);#', shell_exec('stty') ?: '', $match) === 1) {
            if ((int) $match[1] > 0) {
                return (int) $match[1];
            }
        }
        return 80;
    }
    
    /**
     * @codeCoverageIgnore
     */
    private function getNumberOfColumnsWindows() : int {
        $ansicon = getenv('ANSICON');
        $columns = 80;
        if (is_string($ansicon) && preg_match('/^(\\d+)x\\d+ \\(\\d+x(\\d+)\\)$/', trim($ansicon), $matches)) {
            $columns = (int) $matches[1];
        }
        elseif (function_exists('proc_open')) {
            $process = proc_open('mode CON', [
                1 => [
                    'pipe',
                    'w',
                ],
                2 => [
                    'pipe',
                    'w',
                ],
            ], $pipes, null, null, [
                'suppress_errors' => true,
            ]);
            if (is_resource($process)) {
                $info = stream_get_contents($pipes[1]);
                fclose($pipes[1]);
                fclose($pipes[2]);
                proc_close($process);
                if (preg_match('/--------+\\r?\\n.+?(\\d+)\\r?\\n.+?(\\d+)\\r?\\n/', $info, $matches)) {
                    $columns = (int) $matches[2];
                }
            }
        }
        return $columns - 1;
    }

}

Members

Title Sort descending Modifiers Object type Summary
Console::getNumberOfColumns public function Returns the number of columns of the terminal.
Console::getNumberOfColumnsInteractive private function @codeCoverageIgnore
Console::getNumberOfColumnsWindows private function @codeCoverageIgnore
Console::hasColorSupport public function Returns true if STDOUT supports colorization.
Console::isInteractive public function Returns if the file descriptor is an interactive terminal or not.
Console::isWindows private function
Console::STDERR public constant
Console::STDIN public constant
Console::STDOUT public constant
RSS feed
Powered by Drupal