Condividi tramite


Esercitazione: Impostare l'indicatore di stato nel Terminale Windows

Il Terminale Windows supporta le sequenze ConEmu "Indicatore di stato", note anche come "OSC 9; 4". Queste sequenze consentono a un'applicazione della riga di comando di visualizzare un indicatore di stato nella finestra del terminale. Ciò è utile per i comandi a esecuzione prolungata, ad esempio la copia di file di grandi dimensioni o la distribuzione di applicazioni.

Nel Terminale Windows, l'indicatore di stato viene visualizzato in due posizioni:

  • Nell'intestazione della scheda, come anello di stato
  • Nella barra delle applicazioni di Windows, nello stesso modo di un indicatore di stato del download.

Esempio dell'aspetto dell'anello di stato dell'intestazione di tabulazione

Prerequisiti

  • Terminale Windows versione 1.6 o successiva.
  • Per l'animazione della barra delle applicazioni, è necessario assicurarsi che "Mostra animazioni in Windows" sia abilitato in "Impostazioni/Accessibilità/Visualizzazione".

Formato sequenza indicatore di stato

Per impostare l'indicatore di stato, è necessario inviare la sequenza OSC 9; 4 al terminale. Questa sequenza presenta il formato seguente:


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

  • ESC è il carattere di escape, ASCII 27.
  • BEL è il carattere di controllo del segnale acustico di avviso, ASCII 7.
  • <state> è uno dei caratteri seguenti: 0, 1, 2, 3 o 4.
    • 0 è lo stato predefinito e indica che l'indicatore di stato deve essere nascosto. Usare questo stato al termine del comando per cancellare qualsiasi stato di avanzamento.
    • 1: imposta il valore di stato su <progress>, nello stato "predefinito".
    • 2: imposta il valore di stato su <progress>, nello stato "Errore"
    • 3: imposta la barra delle applicazioni sullo stato "Indeterminato". Ciò è utile per i comandi che non hanno un valore di stato, ma sono ancora in esecuzione. Questo stato ignora il valore <progress>.
    • 4: imposta il valore di stato su <progress>, nello stato "Avviso"
  • <progress> è un numero compreso tra 0 e 100 inclusi.

Esempi

PowerShell

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

In alternativa, in 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");

Prompt dei comandi

Il prompt dei comandi è un po' più complicato, poiché non ha un ottimo supporto per le sequenze di escape. È possibile usare il comando echo per inviare la sequenza di escape, ma è necessario usare caratteri ESC e BEL letterali nel file. Questi possono essere sottoposti a rendering come caselle nel Web browser, ma dovrebbero funzionare nel terminale.

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

L'esempio precedente usa il dispositivo NUL per scrivere la sequenza di escape nella console senza una nuova riga.

Nota: la shell preferita non è indicata qui? Se lo si scopre, è possibile contribuire a una soluzione per la shell preferita.