about_ANSI_Terminals

Krátký popis

Popisuje podporu řídicích sekvencí ANSI v PowerShellu.

Dlouhý popis

PowerShell má mnoho funkcí, které podporují použití řídicích sekvencí ANSI k řízení vykreslování výstupu v terminálové aplikaci, která je hostitelem PowerShellu.

PowerShell 7.2 přidal novou automatickou proměnnou $PSStylea změny modulu PowerShellu pro podporu výstupu textu zdobeného ANSI.

Podpora terminálu ANSI

Funkce ANSI jsou navrženy tak, aby byly kompatibilní s terminály založenými na Xterm. Další informace najdete v tématu xterm na Wikipedii.

V systému Windows 10 a vyšší je hostitel konzoly systému Windows kompatibilní s xterm. Aplikace Terminál Windows je také kompatibilní s xterm.

V systému macOS je výchozí terminálová aplikace kompatibilní s xterm.

Pro Linux se každá distribuce dodává s jinou terminálovou aplikací. V dokumentaci k distribuci vyhledejte vhodnou terminálovou aplikaci.

$PSStyle

Proměnná má následující vlastnosti:

  • Reset - Vypne všechny dekorace.
  • Blink – zapne blikací
  • BlinkOff – vypne blikací
  • Tučné – zapne tučné písmo
  • BoldOff – vypne tučné písmo
  • Dim – Zapne dim (přidá se do PowerShellu 7.4)
  • DimOff – Vypne dim off (přidáno v PowerShellu 7.4)
  • Skryté – zapne skryté
  • HiddenOff – vypne skryté
  • Obrácení – zapne zpětnou zpětnou zpětnou zpětnou závislosti
  • ReverseOff – vypne obrácení
  • Kurzíva – zapne kurzívu
  • Kurzíva – Vypne kurzívu
  • Podtržení – zapne podtržení
  • Podtržení – vypne podtržení
  • Přeškrtnutí – zapne přeškrtnutí
  • StrikethroughOff - Vypne přeškrtnutí
  • OutputRendering – řízení, kdy se používá vykreslování výstupu
  • Formátování – vnořený objekt, který řídí výchozí formátování výstupních datových proudů
  • Průběh – vnořený objekt, který řídí vykreslování indikátorů průběhu
  • FileInfo – Vnořený objekt pro řízení barvení FileInfo objektů.
  • Popředí – Vnořený objekt pro řízení barvení popředí
  • Pozadí – vnořený objekt pro řízení barvení pozadí

Základní členové vracejí řetězce řídicích sekvencí ANSI mapovaných na jejich názvy. Hodnoty jsou nastavené tak, aby umožňovaly přizpůsobení. Můžete například změnit tučné písmo na podtržené. Názvy vlastností usnadňují vytváření zdobených řetězců pomocí dokončování tabulátoru:

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

Následující členové určují, jak nebo kdy se používá formátování ANSI:

  • $PSStyle.OutputRenderingSystem.Management.Automation.OutputRendering je výčet s hodnotami:

    • ANSI: Řídicí sekvence ANSI se vždy předávají tak, jak jsou.

      Důležité

      Režim ANSI byste měli použít při přesměrování výstupu do souboru nebo kanálu, který má být spuštěn podřízený. Tím se zajistí, že se výstup nezmění. Použití jakéhokoli jiného režimu změní výstup odebráním řídicích sekvencí ANSI, které mohou změnit chování provádění.

    • PlainText: Řídicí sekvence ANSI jsou vždy oříznuté, takže je to jenom prostý text. Ve vzdálených relacích, pokud je vzdálený hostitel nastavený na PlainText, výstup se před odesláním zpět do místního klienta odstraní řídicí sekvence ANSI.

    • Host: Toto je výchozí chování. Řídicí sekvence ANSI se odeberou z přesměrovaného nebo svislého výstupu. Další informace najdete v tématu Přesměrování výstupu.

  • $PSStyle.Foreground Členové $PSStyle.Background jsou řetězce, které obsahují řídicí sekvence ANSI pro 16 standardních barev konzoly.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    Hodnoty jsou nastavené a mohou obsahovat libovolný počet řídicích sekvencí ANSI. Existuje také FromRgb() metoda pro určení 24bitové barvy. Metodu FromRgb() lze volat dvěma způsoby.

    string FromRgb(byte red, byte green, byte blue)
    string FromRgb(int rgb)
    

    V některém z následujících příkladů je nastavena barva pozadí 24bitová barva Beige.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting je vnořený objekt pro řízení výchozího formátování ladění, chyby, podrobné zprávy, upozornění a záhlaví seznamu a tabulky. Můžete také řídit atributy, jako je tučné písmo a podtržení. $Host.PrivateData Nahrazuje se jako způsob správy barev pro vykreslování formátování. $Host.PrivateData nadále existuje kvůli zpětné kompatibilitě, ale není připojen k $PSStyle.Formatting. $PSStyle.Formatting má následující členy:

    • FormatAccent – formátování položek seznamu
    • ErrorAccent – formátování metadat chyb
    • Chyba – formátování chybových zpráv
    • Upozornění – formátování pro zprávy upozornění
    • Podrobné – formátování pro podrobné zprávy
    • Ladění – formátování pro ladicí zprávy
    • TableHeader – formátování záhlaví tabulky
    • CustomTableHeaderLabel – formátování pro záhlaví tabulky, které jsou počítané hodnoty
    • FeedbackName – formátování názvu poskytovatele zpětné vazby (přidané jako experimentální funkce v PowerShellu 7.4)
    • FeedbackText – formátování zpráv zpětné vazby (přidáno jako experimentální funkce v PowerShellu 7.4)
    • FeedbackAction – formátování navrhovaných akcí poskytovatele zpětné vazby (přidané jako experimentální funkce v PowerShellu 7.4)
  • $PSStyle.Progress umožňuje řídit vykreslování pruhů zobrazení průběhu.

    • Styl – řetězec ANSI, který nastavuje styl vykreslování.
    • MaxWidth – nastaví maximální šířku zobrazení. Výchozí hodnota 120je . Minimální hodnota je 18.
    • Zobrazení – výčet s hodnotami Minimal a Classic. Classic je stávající vykreslování beze změn. Minimal je jeden řádek s minimálním vykreslováním. Minimal je výchozí možnost.
    • UseOSCIndicator - Defaults to $false. Nastavte tuto možnost $true pro terminály, které podporují indikátory OSC.

    Poznámka:

    Pokud hostitel nepodporuje virtuální terminál, $PSStyle.Progress.View nastaví se automaticky na Classichodnotu .

    Následující příklad nastaví styl vykreslování na minimální indikátor průběhu.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo je vnořený objekt pro řízení barvení FileInfo objektů.

    • Adresář – předdefinovaný člen pro určení barvy pro adresáře
    • Symbolický odkaz – Integrovaný člen pro určení barvy symbolických odkazů
    • Spustitelný soubor – předdefinovaný člen, který určuje barvu spustitelných souborů.
    • Přípona – Tento člen slouží k definování barev pro různé přípony souborů. Člen rozšíření obsahuje přípony pro archivaci a soubory PowerShellu.

Rutiny, které generují výstup ANSI

  • Rutiny Markdownu – rutina Show-Markdown zobrazuje obsah souboru obsahujícího text markdownu. Výstup se vykreslí pomocí sekvencí ANSI, které představují různé styly. Definice stylů můžete spravovat pomocí rutin Get-MarkdownOption a Set-MarkdownOption.
  • Rutiny PSReadLine – modul PSReadLine používá sekvence ANSI k obarvení elementů syntaxe PowerShellu na příkazovém řádku. Barvy je možné spravovat pomocí metody Get-PSReadLineOption a Set-PSReadLineOption.
  • Get-Error – Rutina Get-Error vrátí podrobné zobrazení objektu Error naformátované tak, aby se snadněji četlo.
  • Select-String – Počínaje PowerShellem 7.0 používá select-string sekvence ANSI ke zvýraznění odpovídajících vzorů ve výstupu.
  • Write-Progress – Výstup ANSI se spravuje pomocí $PSStyle.Progress, jak je popsáno výše. Další informace najdete v tématu Průběh zápisu.

Přesměrování výstupu v Host režimu

Ve výchozím nastavení $PSStyle.OutputRendering je nastavená hodnota Hostitel. Řídicí sekvence ANSI se odeberou z přesměrovaného nebo svislého výstupu.

OutputRendering se vztahuje pouze na vykreslování v hostiteli Out-File, a Out-String. Výstup z nativních spustitelných souborů není ovlivněn.

PowerShell 7.2.6 změnil chování Out-File a Out-String pro následující scénáře:

  • Pokud je vstupní objekt čistým řetězcem, tyto rutiny zachovávají řetězec bez ohledu na nastavení OutputRendering .
  • Pokud vstupní objekt musí mít použité zobrazení formátování, tyto rutiny zachovají nebo odeberou řídicí sekvence z výstupních řetězců formátování na základě nastavení OutputRendering .

Jedná se o zásadní změnu v těchto rutinách v porovnání s PowerShellem 7.2.

OutputRendering se nevztahuje na výstup z hostitelského procesu PowerShellu, například při spuštění pwsh z příkazového řádku a přesměrování výstupu.

V následujícím příkladu se PowerShell spouští v Linuxu z bash. Rutina Get-ChildItem vytvoří text zdobený ANSI. Vzhledem k tomu, že přesměrování probíhá v bash procesu, mimo hostitele PowerShellu, výstup není ovlivněn výstupem OutputRendering.

pwsh -noprofile -command 'Get-Childitem' > out.txt

Při kontrole obsahu out.txt uvidíte řídicí sekvence ANSI.

Naproti tomu pokud dojde k přesměrování v rámci relace PowerShellu, má outputRendering vliv na přesměrovaný výstup.

pwsh -noprofile -command 'Get-Childitem > out.txt'

Při kontrole obsahu out.txt neexistují žádné řídicí sekvence ANSI.

Zakázání výstupu ANSI

Podporu řídicích sekvencí ANSI je možné vypnout pomocí proměnné prostředí TERM nebo NO_COLOR .

Následující hodnoty $env:TERM chování změní následujícím způsobem:

  • dumb -Nastaví $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -Nastaví $PSStyle.OutputRendering = PlainText
  • xtermm -Nastaví $PSStyle.OutputRendering = PlainText

Pokud $env:NO_COLOR existuje, je $PSStyle.OutputRendering nastavena na PlainText. Další informace o proměnné prostředí NO_COLOR naleznete v tématu https://no-color.org/.

Použití z jazyka $PSStyle C#

Vývojáři v jazyce C# mají přístup PSStyle jako jednoúčelový přístup, jak je znázorněno v následujícím příkladu:

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle existuje v oboru názvů System.Management.Automation.

Modul PowerShellu obsahuje následující změny:

  • Systém formátování PowerShellu se aktualizuje tak, aby respektoval $PSStyle.OutputRendering.
  • Tento StringDecorated typ se přidá pro zpracování řídicích řetězců ANSI.
  • string IsDecorated Logická vlastnost byla přidána k vrácení true, pokud řetězec obsahuje ESC nebo C1 CSI znakové sekvence.
  • Length Vlastnost řetězce vrátí délku textu bez řídicích sekvencí ANSI.
  • Metoda StringDecorated Substring(int contentLength) vrátí podřetězdí začínající indexem 0 až do délky obsahu, která není součástí řídicích sekvencí ANSI. To je potřeba pro formátování tabulky, aby se zkrátily řetězce a zachovaly řídicí sekvence ANSI, které nezabírají tisknutelnou mezeru znaků.
  • Metoda string ToString() zůstane stejná a vrátí verzi řetězce ve formátu prostého textu.
  • Metoda string ToString(bool Ansi) vrátí nezpracovaný vložený řetězec ANSI, pokud Ansi je parametr pravdivý. V opačném případě se vrátí verze prostého textu s odebranými řídicími sekvencemi ANSI.
  • Metoda FormatHyperlink(string text, uri link) vrátí řetězec obsahující řídicí sekvence ANSI použité k dekoraci hypertextových odkazů. Někteří hostitelé terminálu, jako je Terminál Windows, podporují tento kód, takže vykreslený text je možné kliknout v terminálu.

Statické metody třídy PSStyle

PowerShell 7.4 přidá do [System.Management.Automation.PSStyle] třídy tři nové statické metody.

[System.Management.Automation.PSStyle] | Get-Member -Static -MemberType Method
   TypeName: System.Management.Automation.PSStyle

Name                               MemberType Definition
----                               ---------- ----------
Equals                             Method     static bool Equals(System.Object objA, System.Object objB)
MapBackgroundColorToEscapeSequence Method     static string MapBackgroundColorToEscapeSequence(System.ConsoleColor bac…
MapColorPairToEscapeSequence       Method     static string MapColorPairToEscapeSequence(System.ConsoleColor foregroun…
MapForegroundColorToEscapeSequence Method     static string MapForegroundColorToEscapeSequence(System.ConsoleColor for…
ReferenceEquals                    Method     static bool ReferenceEquals(System.Object objA, System.Object objB)

Tyto metody poskytují způsob, jak převést hodnoty ConsoleColor na řídicí sekvence ANSI pro popředí a barvy pozadí nebo pro kombinaci obou.

Následující příklady ukazují řídicí sekvence ANSI vytvořené těmito metodami.

using namespace System.Management.Automation
[PSStyle]::MapBackgroundColorToEscapeSequence('Black') | Format-Hex
   Label: String (System.String) <3A04954D>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 34 30 6D                                  �[40m
[PSStyle]::MapForegroundColorToEscapeSequence('Red') | Format-Hex
   Label: String (System.String) <38B50F41>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 6D                                  �[91m
[PSStyle]::MapColorPairToEscapeSequence('Red','Black') | Format-Hex
   Label: String (System.String) <365A5875>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 3B 34 30 6D                         �[91;40m

Viz také