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 $PSStyle
a 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.OutputRendering
System.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ý naPlainText
, 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. MetoduFromRgb()
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é ve skutečnosti nemají vlastnosti objektu
- 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
120
je . Minimální hodnota je 18. - Zobrazení – výčet s hodnotami
Minimal
aClassic
.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 naClassic
hodnotu .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
-nastavuje$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-nastavuje$PSStyle.OutputRendering = PlainText
xtermm
-nastavuje$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 obsahujeESC
neboC1 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, pokudAnsi
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