about_ANSI_Terminals
Descrição breve
Descreve o suporte disponível para sequências de escape ANSI no PowerShell.
Descrição longa
O PowerShell tem muitos recursos que dão suporte ao uso de sequências de escape ANSI para controlar a renderização da saída no aplicativo de terminal que está hospedando o PowerShell.
O PowerShell 7.2 adicionou uma nova variável automática, $PSStyle
, e alterações no mecanismo do PowerShell para dar suporte à saída de texto decorado com ANSI.
Suporte a terminais ANSI
Os recursos ANSI são projetados para serem compatíveis com os terminais baseados em xterm. Para obter mais informações, consulte xterm na Wikipedia.
No Windows 10 e superior, o Host do Console do Windows é compatível com xterm. O aplicativo Windows Terminal também é compatível com xterm.
No macOS, o aplicativo de terminal padrão é compatível com xterm.
Para Linux, cada distribuição é fornecida com um aplicativo de terminal diferente. Consulte a documentação da sua distribuição para encontrar uma aplicação de terminal adequada.
$PSStyle
A variável tem as seguintes propriedades:
- Redefinir - Desativa todas as decorações
- Blink - Ativa o Blink
- BlinkOff - Desliga o Blink
- Negrito - Ativa o negrito
- BoldOff - Desativa o negrito
- Dim - Ativa Dim (adicionado no PowerShell 7.4)
- DimOff – desativa o Dim (adicionado no PowerShell 7.4)
- Oculto - Ativa Oculto
- HiddenOff - Desativa o Oculto
- Inverter - Ativa a marcha à ré
- ReverseOff - Desativa o Reverse
- Itálico - Ativa o itálico
- ItalicOff - Desativa o itálico
- Sublinhado - Ativa o sublinhado
- UnderlineOff - Desativa o sublinhado
- Tachado - Vira greve em
- StrikethroughOff - Desativa o tachado
- OutputRendering - Controle quando a renderização de saída é usada
- Formatação - Objeto aninhado que controla a formatação padrão para fluxos de saída
- Progresso - Objeto aninhado que controla a renderização das barras de progresso
- FileInfo - Objeto aninhado para controlar a coloração de objetos FileInfo .
- Primeiro plano - Objeto aninhado para controlar a coloração do primeiro plano
- Plano de fundo - Objeto aninhado para controlar a cor do plano de fundo
Os membros de base retornam cadeias de caracteres de sequências de escape ANSI mapeadas para seus nomes. Os valores são configuráveis para permitir a personalização. Por exemplo, você pode alterar negrito para sublinhado. Os nomes de propriedade facilitam a criação de cadeias de caracteres decoradas usando o preenchimento de tabulação:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Os seguintes membros controlam como ou quando a formatação ANSI é usada:
$PSStyle.OutputRendering
é umaSystem.Management.Automation.OutputRendering
enumeração com os valores:ANSI
: As sequências de escape ANSI são sempre passadas no estado em que se encontram.Importante
Você deve usar o modo ANSI ao redirecionar a saída para um arquivo ou o pipeline que deve ser executado downstream. Isso garante que a saída não seja alterada. O uso de qualquer outro modo altera a saída removendo sequências de escape ANSI, o que pode alterar o comportamento de execução.
PlainText
: As sequências de escape ANSI são sempre removidas para que sejam apenas texto simples. Em sessões remotas, se o host remoto estiver definido comoPlainText
, a saída será removida das sequências de escape ANSI antes de enviá-la de volta ao cliente local.Host
: Este é o comportamento padrão. As sequências de escape ANSI são removidas da saída redirecionada ou canalizada. Para obter mais informações, consulte Redirecionando a saída.
Os
$PSStyle.Background
membros e$PSStyle.Foreground
são cadeias de caracteres que contêm as sequências de escape ANSI para as 16 cores padrão do console.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Os valores são configuráveis e podem conter qualquer número de sequências de escape ANSI. Há também um
FromRgb()
método para especificar a cor de 24 bits. Existem duas maneiras de chamar oFromRgb()
método.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
Um dos exemplos a seguir define a cor de fundo como a cor
Beige
de 24 bits .$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
é um objeto aninhado para controlar a formatação padrão de depuração, erro, detalhado, mensagens de aviso e cabeçalhos de lista e tabela. Você também pode controlar atributos como negrito e sublinhado. Ele substitui$Host.PrivateData
como a maneira de gerenciar cores para formatação de renderização.$Host.PrivateData
continua a existir para compatibilidade com versões anteriores, mas não está conectado ao$PSStyle.Formatting
.$PSStyle.Formatting
tem os seguintes membros:- FormatAccent - formatação para itens de lista
- ErrorAccent - formatação para metadados de erro
- Erro - formatação para mensagens de erro
- Aviso - formatação para mensagens de aviso
- Detalhado - formatação para mensagens detalhadas
- Depuração - formatação para mensagens de depuração
- TableHeader - formatação para cabeçalhos de tabela
- CustomTableHeaderLabel - formatação para cabeçalhos de tabela que não são realmente propriedades no objeto
- FeedbackName – formatação para o nome do provedor de comentários (adicionado como um recurso experimental no PowerShell 7.4)
- FeedbackText – formatação para mensagens de comentários (adicionada como um recurso experimental no PowerShell 7.4)
- FeedbackAction – formatação para as ações sugeridas do provedor de comentários (adicionado como um recurso experimental no PowerShell 7.4)
$PSStyle.Progress
Permite controlar a renderização da barra de visualização de progresso.- Estilo - Uma string ANSI que define o estilo de renderização.
- MaxWidth - Define a largura máxima da exibição. Assume o padrão de
120
. O valor mínimo é 18. - View - Uma enumeração com valores
Minimal
eClassic
.Classic
é a renderização existente sem alterações.Minimal
é uma renderização mínima de linha única.Minimal
é o padrão. - UseOSCIndicator - O padrão é
$false
. Defina como$true
para terminais que suportam indicadores OSC.
Observação
Se o host não der suporte ao terminal virtual,
$PSStyle.Progress.View
será definido automaticamente comoClassic
.O exemplo a seguir define o estilo de renderização como uma barra de progresso mínima.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
é um objeto aninhado para controlar a coloração de objetos FileInfo .- Diretório - Membro interno para especificar a cor dos diretórios
- SymbolicLink - Membro interno para especificar a cor dos links simbólicos
- Executável - Membro interno para especificar a cor dos executáveis.
- Extensão - Use este membro para definir cores para diferentes extensões de arquivo. O membro Extensão inclui previamente extensões para arquivos do PowerShell e da camada de armazenamento de arquivos.
Cmdlets que geram saída ANSI
- Os cmdlets markdown – o cmdlet Show-Markdown exibe o conteúdo de um arquivo que contém texto markdown. A saída é renderizada usando sequências ANSI para representar estilos diferentes. Você pode gerenciar as definições dos estilos usando os cmdlets Get-MarkdownOption e Set-MarkdownOption .
- Cmdlets PSReadLine – o módulo PSReadLine usa sequências ANSI para colorir elementos de sintaxe do PowerShell na linha de comando. As cores podem ser gerenciadas usando Get-PSReadLineOption e Set-PSReadLineOption.
Get-Error
- o cmdlet Get-Error retorna uma exibição detalhada de um objeto Error , formatado para facilitar a leitura.Select-String
- A partir do PowerShell 7.0, Select-String usa sequências ANSI para realçar os padrões correspondentes na saída.Write-Progress
- A saída ANSI é gerenciada usando$PSStyle.Progress
, conforme descrito acima. Para obter mais informações, consulte Write-Progress
Redirecionando a saída no Host
modo
Por padrão, $PSStyle.OutputRendering
é um conjunto como Host. As sequências de escape ANSI são removidas da saída redirecionada ou canalizada.
OutputRendering só se aplica à renderização no Host, Out-File
, e Out-String
. A saída de executáveis nativos não é afetada.
O PowerShell 7.2.6 alterou o comportamento de Out-File
e Out-String
para os seguintes cenários:
- Quando o objeto de entrada é uma cadeia de caracteres pura, esses cmdlets mantêm a cadeia de caracteres inalterada, independentemente da configuração OutputRendering .
- Quando o objeto de entrada precisa ter uma exibição de formatação aplicada a ele, esses cmdlets mantêm ou removem sequências de escape das cadeias de caracteres de saída de formatação com base na configuração OutputRendering .
Essa é uma alteração significativa nesses cmdlets em comparação com o PowerShell 7.2.
OutputRendering não se aplica à saída do processo de host do PowerShell, por exemplo, quando você executa pwsh
de uma linha de comando e redireciona a saída.
No exemplo a seguir, o PowerShell é executado no Linux a partir do bash
. O Get-ChildItem
cmdlet produz texto decorado com ANSI. Como o bash
redirecionamento ocorre no processo, fora do host do PowerShell, a saída não é afetada por OutputRendering.
pwsh -noprofile -command 'Get-Childitem' > out.txt
Ao inspecionar o conteúdo, você vê as sequências de out.txt
escape ANSI.
Por outro lado, quando o redirecionamento ocorre na sessão do PowerShell, OutputRendering afeta a saída redirecionada.
pwsh -noprofile -command 'Get-Childitem > out.txt'
Quando você inspeciona o conteúdo de não há sequências de out.txt
escape ANSI.
Desativando a saída ANSI
O suporte para sequências de escape ANSI pode ser desativado usando as variáveis de ambiente TERM ou NO_COLOR.
Os seguintes valores de $env:TERM
alteram o comportamento conforme abaixo:
dumb
-Define$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Define$PSStyle.OutputRendering = PlainText
xtermm
-Define$PSStyle.OutputRendering = PlainText
Se $env:NO_COLOR
existir, então $PSStyle.OutputRendering
é definido como PlainText. Para obter mais informações sobre a variável de ambiente NO_COLOR , consulte https://no-color.org/.
Usando $PSStyle
de C#
Os desenvolvedores de C# podem acessar PSStyle
como um singleton, conforme mostrado no exemplo a seguir:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
existe no namespace System.Management.Automation.
O mecanismo do PowerShell inclui as seguintes alterações:
- O sistema de formatação do PowerShell é atualizado para respeitar
$PSStyle.OutputRendering
. - O
StringDecorated
tipo é adicionado para lidar com cadeias de caracteres de escape ANSI. - A
string IsDecorated
propriedade booleana foi adicionada para retornar true quando a cadeia de caracteres contémESC
sequências deC1 CSI
caracteres. - A
Length
propriedade de uma cadeia de caracteres retorna o comprimento do texto sem as sequências de escape ANSI. - O
StringDecorated Substring(int contentLength)
método retorna uma subcadeia de caracteres começando no índice 0 até o comprimento do conteúdo que não faz parte das sequências de escape ANSI. Isso é necessário para a formatação da tabela a fim de truncar cadeias de caracteres e preservar as sequências de escape ANSI que não ocupam espaço de caracteres imprimível. - O
string ToString()
método permanece o mesmo e retorna a versão de texto não criptografado da cadeia de caracteres. - O
string ToString(bool Ansi)
método retornará a cadeia de caracteres inserida ANSI bruta se oAnsi
parâmetro for verdadeiro. Caso contrário, uma versão de texto não criptografado com sequências de escape ANSI removidas será retornada. - O
FormatHyperlink(string text, uri link)
método retorna uma cadeia de caracteres contendo sequências de escape ANSI usadas para decorar hiperlinks. Alguns hosts de terminal, como o Terminal do Windows, dão suporte a essa marcação, o que torna o texto renderizado clicável no terminal.
Métodos estáticos da classe PSStyle
O PowerShell 7.4 adiciona três novos métodos estáticos à [System.Management.Automation.PSStyle]
classe.
[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)
Esses métodos fornecem uma maneira de converter valores ConsoleColor em sequências de escape ANSI para cores de primeiro plano e plano de fundo ou para uma combinação de ambas.
Os exemplos a seguir mostram as sequências de escape ANSI produzidas por esses métodos.
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