Руководство. Настройка индикатора выполнения в Терминал Windows

Терминал Windows поддерживает последовательности ConEmu Progress Bar, также известные как OSC 9; 4". Эти последовательности позволяют приложению командной строки отображать индикатор хода выполнения в окне терминала. Это полезно для длительных команд, таких как копирование больших файлов или развертывание приложений.

В Терминал Windows индикатор хода выполнения отображается в двух местах:

  • В заголовке вкладки в виде кольца хода выполнения
  • На панели задач Windows то же самое, что и индикатор выполнения загрузки.

Пример того, как показано, как выглядит заголовок вкладки.

Необходимые компоненты

  • Терминал Windows версии 1.6 или более поздней версии.
  • Для анимации панели задач необходимо убедиться, что в разделе "Параметры/ Упрощение доступа и отображения" включена функция "Показать анимации в Windows".

Формат последовательности индикаторов выполнения

Чтобы задать индикатор выполнения, необходимо отправить OSC 9; 4 последовательности в терминале. Эта последовательность имеет следующий формат:


ESC ] 9 ; 4 ; <state> ; <progress> BEL

  • ESC — escape-символ, ASCII 27.
  • BEL — символ колокола, ASCII 7.
  • <state>является одним из 0, , 21, 3или 4.
    • 0 — это состояние по умолчанию и указывает, что индикатор выполнения должен быть скрыт. Используйте это состояние при завершении команды, чтобы очистить любое состояние хода выполнения.
    • 1: задайте значение <progress>хода выполнения в состоянии по умолчанию.
    • 2: задайте значение <progress>хода выполнения в состоянии "Ошибка"
    • 3: задайте для панели задач состояние "Неопределенное". Это полезно для команд, которые не имеют значения хода выполнения, но по-прежнему выполняются. Это состояние игнорирует <progress> значение.
    • 4: задайте значение <progress>хода выполнения в состоянии "Предупреждение"
  • <progress> — от 0 до 100 включительно.

Примеры

PowerShell

# Set the progress bar to 50%
Write-Host -NoNewline ([char]27 + "]9;4;1;50" + [char]7)

Или, кроме того, в PowerShell 7:

# Set the progress bar to 50%
Write-Host -NoNewline ("`e]9;4;1;50`a")

Bash

# Set the progress bar to 50%
echo -ne "\033]9;4;1;50\a"

C#

// Set the progress bar to 50%
Console.Write("\x1b]9;4;1;50\x07");

Командная строка

Командная строка немного сложнее, так как она не поддерживает escape-последовательности. Вы можете использовать команду для отправки escape-последовательности, но вам потребуется использовать echo литеральные символы ESC и BEL в файле. Они могут отображаться в виде полей в веб-браузере, но они должны работать в терминале.

<NUL set /p =]9;4;1;50
echo Started progress (normal, 50)

В приведенном выше примере устройство используется NUL для записи escape-последовательности в консоль без новой строки.

Примечание. Не видите любимую оболочку здесь? Если вы считаете это, вы можете внести свой вклад в решение для предпочитаемой оболочки!