Compartilhar via


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 terminal que hospeda o PowerShell.

O PowerShell 7.2 adicionou uma nova variável automática, $PSStylee alterações no mecanismo do PowerShell para dar suporte à saída de texto decorado por ANSI.

Suporte ao Terminal ANSI

Os recursos ANSI foram projetados para serem compatíveis com os terminais baseados em xterm. Para obter mais informações, consulte xterm na Wikipédia.

Em Windows 10 e superiores, o Host do Console do Windows é compatível com xterm. O aplicativo Terminal do Windows 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 distribuição para encontrar um aplicativo de terminal adequado.

$PSStyle

A variável tem as seguintes propriedades:

  • Redefinir – desativa todas as decorações
  • Piscar – ativa o Blink
  • BlinkOff – Desativa o BlinkOff
  • Negrito – ativa negrito
  • BoldOff - Desativa negrito
  • Oculto – Ativa oculta
  • HiddenOff – Desativa o Oculto
  • Inverter – ativa a opção Inverter
  • ReverseOff – Desativa o inverso
  • Itálico – Ativa Itálico
  • ItalicOff - Desativa Itálico
  • Sublinhado – Ativa o sublinhado
  • UnderlineOff - Desativa o sublinhado
  • Tachado - Ativa a greve
  • StrikethroughOff - Desativa a greve
  • OutputRendering - Controlar 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 de barras de progresso
  • FileInfo – objeto aninhado para controlar a coloração de objetos FileInfo .
  • Primeiro plano – objeto aninhado para controlar a coloração em primeiro plano
  • Plano de fundo – objeto aninhado para controlar a coloração da tela 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 a conclusão da guia:

"$($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 é uma System.Management.Automation.OutputRendering enumeração com os valores:

    • ANSI: as sequências de escape ANSI são sempre passadas no local em que se encontram.

      Importante

      Você deve usar o modo ANSI ao redirecionar a saída para um arquivo ou o pipeline que se destina a 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 despojadas para que seja apenas texto sem formatação.

    • Host: esse é o comportamento padrão. As sequências de escape ANSI são removidas da saída redirecionada ou canalizada. Para obter mais informações, confira Redirecionamento de 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. Também há um FromRgb() método para especificar a cor de 24 bits. Há duas maneiras de chamar o FromRgb() método .

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

    Qualquer um dos exemplos a seguir define a cor da tela de fundo da cor Beigede 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 a renderização de formatação. $Host.PrivateData continua a existir para compatibilidade com versões anteriores, mas não está conectado a $PSStyle.Formatting. $PSStyle.Formatting tem os seguintes membros:

    • FormatAccent - formatação para itens de lista
    • TableHeader – formatação para cabeçalhos de tabela
    • 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
  • $PSStyle.Progress permite controlar a renderização da barra de exibição de progresso.

    • Estilo – uma cadeia de caracteres ANSI definindo 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.
    • Exibição – uma enumeração com valores Minimal e Classic. 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 isso como para terminais que dão suporte a $true indicadores OSC.

    Observação

    Se o host não der suporte ao terminal virtual, $PSStyle.Progress.View será definido automaticamente como Classic.

    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 cor para diretórios
    • SymbolicLink – membro interno para especificar cor para links simbólicos
    • Executável – membro interno para especificar a cor para executáveis.
    • Extensão – use esse 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 o 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 , formatada para facilitar a leitura.
  • Select-String – A partir do PowerShell 7.0, Select-String usa sequências ANSI para realçar os padrões de correspondência 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 definido 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-Filee 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 interruptiva 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 do bash. O Get-ChildItem cmdlet produz texto decorado por ANSI. Como o bash redirecionamento ocorre no processo, fora do host do PowerShell, a saída não é afetada pelo OutputRendering.

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

Ao inspecionar o conteúdo de, você vê as sequências de out.txt escape ANSI.

Por outro lado, quando o redirecionamento ocorre dentro da sessão do PowerShell, OutputRendering afeta a saída redirecionada.

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

Quando você inspeciona o conteúdo do, não há sequências de out.txt escape ANSI.

Desabilitando 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, será $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 manipular cadeias de caracteres de escape ANSI.
  • A string IsDecorated propriedade booliana foi adicionada para retornar true quando a cadeia de caracteres contém ESC sequências de caracteres ou C1 CSI .
  • 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 de 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 o Ansi parâmetro for true. 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 que contém 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.

Confira também