Получить или установить поддержку VT100 для заданного потока, связанного с буфером вывода консоли Windows

# sapi_windows_vt100_support

(PHP 7 >= 7.2.0, PHP 8)

sapi_windows_vt100_support — Получить или установить поддержку VT100 для заданного потока, связанного с буфером вывода консоли Windows

### Описание

function sapi_windows_vt100_support(resource `$stream`, ?bool `$enable` = `null`): bool

Если параметр `enable` равен `null`, функция возвращает `true` или `false` в зависимости от того, разрешены или нет управляющие последовательности VT100 для `stream`

Если параметр `enable` является логическим значением (bool), функция попытается включить или выключить функциональность VT100 для потока `stream`. В этом случае функция вернёт `true` или `false` в зависимости от успешности выполнения.

При старте, PHP пытается включить VT100 для потоков `STDOUT` и `STDERR`. Но если, например, эти потоки перенаправлены в файл, то поддержка VT100 может не включиться.

Если включена поддержка VT100, то можно использовать управляющие последовательности, так как они известны терминалу. Они позволяют изменять вывод терминала. В Windows эти последовательности известны как "Console Virtual Terminal Sequences".

Внимание

Эта функция использует реализацию флага `ENABLE_VIRTUAL_TERMINAL_PROCESSING` в Windows 10 API, следовательно функциональность VT100 может быть недоступна в более старых версиях Windows.

### Список параметров

`stream`

  Поток, с которым будет работать функция.

`enable`

  Если является логическим значением (bool), то должно быть либо `true`, либо `false`, для включения и отключения VT100 соответственно.

### Возвращаемые значения

Если параметр `enable` равен `null`, функция возвращает `true` или `false` в зависимости от того, разрешены или нет управляющие последовательности VT100

Если параметр `enable` является логическим значением (bool): Функция возвращает `true`, если выполнилась успешно, или `false`, если возникла ошибка.

### Список изменений

Версия | Описание
--- | ---
8.0.0 | `enable` теперь допускает значение null.

### Примеры

Пример #1 Состояние sapi_windows_vt100_support() по умолчанию

По умолчанию, для `STDOUT` и `STDERR` поддержка VT100 включена.

    php -r "var_export(sapi_windows_vt100_support(STDOUT));echo ' ';var_export(sapi_windows_vt100_support(STDERR));"

Вывод приведённого примера будет похож на:

    true true

Если поток перенаправлен, то поддержка VT100 будет отключена:

    php -r "var_export(sapi_windows_vt100_support(STDOUT));echo ' ';var_export(sapi_windows_vt100_support(STDERR));" 2>NUL

Вывод приведённого примера будет похож на:

true false

Пример #2 Изменение состояния с помощью sapi_windows_vt100_support()

Вы не можете включить поддержку VT100 для `STDOUT` или `STDERR` если эти потоки перенаправлены.

    php -r "var_export(sapi_windows_vt100_support(STDOUT, true));echo ' ';var_export(sapi_windows_vt100_support(STDERR, true));" 2>NUL

Вывод приведённого примера будет похож на:

    true false

Пример #3 Пример использования с поддержкой VT100

    <?php
    $out = fopen('php://stdout','w');
    fwrite($out, 'Just forgot a lettr.');
    // Переместить курсор на две позиции назад
    fwrite($out, "\033[2D");
    // Вставляет один пробел, сдвигая существующий текст вправо -> Просто забыли букву.
    fwrite($out, "\033[1@");
    fwrite($out, 'e');
    ?>

Результат выполнения приведённого примера:

    Just forgot a letter.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open