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
  • 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.

    • 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
    • TableHeader – formátování záhlaví tabulky
    • 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
  • $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.

    Poznámka:

    $PSStyle.FileInfo je k dispozici pouze v případech, kdy je povolená PSAnsiRenderingFileInfo experimentální funkce. Další informace najdete v tématu about_Experimental_Features a používání experimentálních funkcí.

    V PowerShellu PSAnsiRenderingFileInfo 7.3 se tato funkce stala standardním a dostupným ve výchozím nastavení.

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.

Viz také