about_ANSI_Terminals

Deskripsi singkat

Menjelaskan dukungan yang tersedia untuk urutan escape ANSI di PowerShell.

Deskripsi panjang

PowerShell memiliki banyak fitur yang mendukung penggunaan urutan escape ANSI untuk mengontrol penyajian output di aplikasi terminal yang menghosting PowerShell.

PowerShell 7.2 menambahkan variabel otomatis baru, $PSStyle, dan perubahan pada mesin PowerShell untuk mendukung output teks yang dihiasi ANSI.

Dukungan Terminal ANSI

Fitur ANSI dirancang agar kompatibel dengan terminal berbasis xterm. Untuk informasi selengkapnya, lihat xterm di Wikipedia.

Pada Windows 10 dan yang lebih tinggi, Host Konsol Windows kompatibel dengan xterm. Aplikasi Terminal Windows juga kompatibel dengan xterm.

Di macOS, aplikasi terminal default kompatibel dengan xterm.

Untuk Linux, setiap distribusi dikirim dengan aplikasi terminal yang berbeda. Lihat dokumentasi distribusi Anda untuk menemukan aplikasi terminal yang sesuai.

$PSStyle

Variabel memiliki properti berikut:

  • Reset - Menonaktifkan semua dekorasi
  • Blink - Mengaktifkan Blink
  • BlinkOff - Mematikan Blink
  • Tebal - Mengaktifkan Tebal
  • BoldOff - Mematikan Tebal
  • Redup - Mengaktifkan Redup (ditambahkan di PowerShell 7.4)
  • DimOff - Mematikan Dim (ditambahkan di PowerShell 7.4)
  • Tersembunyi - Aktifkan Tersembunyi
  • HiddenOff - Mematikan Tersembunyi
  • Balik - Mengaktifkan Balik
  • ReverseOff - Mematikan Balik
  • Miring - Hidupkan Miring
  • ItalicOff - Mematikan Miring
  • Garis bawah - Mengaktifkan garis bawah
  • Garis bawahOff - Menonaktifkan garis bawah
  • Coretan - Berbalik menyerang melalui pada
  • StrikethroughOff - Berbalik menyerang melalui off
  • OutputRendering - Kontrol saat penyajian output digunakan
  • Pemformatan - Objek berlapis yang mengontrol pemformatan default untuk aliran output
  • Kemajuan - Objek berlapis yang mengontrol penyajian bilah kemajuan
  • FileInfo - Objek berlapis untuk mengontrol pewarnaan objek FileInfo .
  • Latar depan - Objek berlapis untuk mengontrol pewarnaan latar depan
  • Latar Belakang - Objek berlapis untuk mengontrol pewarnaan latar belakang

Anggota dasar mengembalikan string urutan escape ANSI yang dipetakan ke namanya. Nilai diatur untuk memungkinkan kustomisasi. Misalnya, Anda dapat mengubah tebal menjadi garis bawah. Nama properti memudahkan Anda membuat string yang didekorasi menggunakan penyelesaian tab:

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

Anggota berikut mengontrol bagaimana atau kapan pemformatan ANSI digunakan:

  • $PSStyle.OutputRendering adalah System.Management.Automation.OutputRendering enum dengan nilai:

    • ANSI: Urutan escape ANSI selalu diteruskan apa adanya.

      Penting

      Anda harus menggunakan mode ANSI saat mengalihkan output ke file atau alur yang dimaksudkan untuk dijalankan di hilir. Ini memastikan bahwa output tidak diubah. Menggunakan mode lain mengubah output dengan menghapus urutan escape ANSI, yang dapat mengubah perilaku eksekusi.

    • PlainText: Urutan escape ANSI selalu dilucuti sehingga hanya teks biasa. Dalam sesi jarak jauh, jika host jarak jauh diatur ke PlainText, output dilucuti dari urutan escape ANSI sebelum mengirimkannya kembali ke klien lokal.

    • Host: Ini adalah perilaku default. Urutan escape ANSI dihapus dari output yang dialihkan atau disalurkan. Untuk informasi selengkapnya, lihat Mengalihkan output.

  • Anggota $PSStyle.Background dan $PSStyle.Foreground adalah string yang berisi urutan escape ANSI untuk 16 warna konsol standar.

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

    Nilai dapat diatur dan dapat berisi sejumlah urutan escape ANSI. Ada juga FromRgb() metode untuk menentukan warna 24-bit. Ada dua cara untuk memanggil FromRgb() metode .

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

    Salah satu contoh berikut mengatur warna latar belakang warna Beige24-bit .

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting adalah objek berlapis untuk mengontrol pemformatan default debug, kesalahan, verbose, pesan peringatan, dan header daftar dan tabel. Anda juga dapat mengontrol atribut seperti tebal dan garis bawah. Ini menggantikan $Host.PrivateData sebagai cara untuk mengelola warna untuk penyajian pemformatan. $Host.PrivateData terus ada untuk kompatibilitas mundur tetapi tidak tersambung ke $PSStyle.Formatting. $PSStyle.Formatting memiliki anggota berikut:

    • FormatAccent - pemformatan untuk item daftar
    • ErrorAccent - pemformatan untuk metadata kesalahan
    • Kesalahan - pemformatan untuk pesan kesalahan
    • Peringatan - pemformatan untuk pesan peringatan
    • Verbose - pemformatan untuk pesan verbose
    • Debug - pemformatan untuk pesan debug
    • TableHeader - pemformatan untuk header tabel
    • CustomTableHeaderLabel - pemformatan untuk header tabel yang merupakan nilai terhitung
    • FeedbackName - pemformatan untuk nama penyedia umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
    • FeedbackText - pemformatan untuk pesan umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
    • FeedbackAction - pemformatan untuk tindakan yang disarankan penyedia umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
  • $PSStyle.Progress memungkinkan Anda mengontrol penyajian bilah tampilan kemajuan.

    • Gaya - String ANSI mengatur gaya penyajian.
    • MaxWidth - Mengatur lebar maksimum tampilan. Default ke 120. Nilai minimum adalah 18.
    • Lihat - Enum dengan nilai, Minimal dan Classic. Classic adalah penyajian yang ada tanpa perubahan. Minimal adalah penyajian minimal satu baris. Minimal adalah defaultnya.
    • UseOSCIndicator - Default ke $false. Atur ini ke $true untuk terminal yang mendukung indikator OSC.

    Catatan

    Jika host tidak mendukung Terminal Virtual, $PSStyle.Progress.View secara otomatis diatur ke Classic.

    Contoh berikut mengatur gaya penyajian ke bilah kemajuan minimal.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo adalah objek berlapis untuk mengontrol pewarnaan objek FileInfo .

    • Direktori - Anggota bawaan untuk menentukan warna untuk direktori
    • SymbolicLink - Anggota bawaan untuk menentukan warna untuk tautan simbolis
    • Executable - Anggota bawaan untuk menentukan warna untuk executable.
    • Ekstensi - Gunakan anggota ini untuk menentukan warna untuk ekstensi file yang berbeda. Anggota Ekstensi telah menyertakan ekstensi untuk file arsip dan PowerShell.

Cmdlet yang menghasilkan output ANSI

  • Cmdlet markdown - cmdlet Show-Markdown menampilkan konten file yang berisi teks markdown. Output dirender menggunakan urutan ANSI untuk mewakili gaya yang berbeda. Anda dapat mengelola definisi gaya menggunakan cmdlet Get-MarkdownOption dan Set-MarkdownOption .
  • Cmdlet PSReadLine - modul PSReadLine menggunakan urutan ANSI untuk mewarnai elemen sintaks PowerShell pada baris perintah. Warna dapat dikelola menggunakan Get-PSReadLineOption dan Set-PSReadLineOption.
  • Get-Error- cmdlet Get-Error mengembalikan tampilan terperinci dari objek Kesalahan, yang diformat untuk membuatnya lebih mudah dibaca.
  • Select-String - Dimulai dengan PowerShell 7.0, Select-String menggunakan urutan ANSI untuk menyoroti pola yang cocok dalam output.
  • Write-Progress - Output ANSI dikelola menggunakan $PSStyle.Progress, seperti yang dijelaskan di atas. Untuk informasi selengkapnya, lihat Write-Progress

Mengalihkan output dalam Host mode

Secara default, $PSStyle.OutputRendering adalah diatur ke Host. Urutan escape ANSI dihapus dari output yang dialihkan atau disalurkan.

OutputRendering hanya berlaku untuk penyajian di Host, Out-File, dan Out-String. Output dari executable asli tidak terpengaruh.

PowerShell 7.2.6 mengubah perilaku Out-File dan Out-String untuk skenario berikut:

  • Ketika objek input adalah string murni, cmdlet ini menjaga string tidak berubah terlepas dari pengaturan OutputRendering .
  • Ketika objek input harus memiliki tampilan pemformatan yang diterapkan padanya, cmdlet ini menyimpan atau menghapus urutan escape dari string output pemformatan berdasarkan pengaturan OutputRendering .

Ini adalah perubahan yang melanggar dalam cmdlet ini dibandingkan dengan PowerShell 7.2.

OutputRendering tidak berlaku untuk output dari proses host PowerShell, misalnya saat Anda menjalankan pwsh dari baris perintah dan mengalihkan output.

Dalam contoh berikut, PowerShell dijalankan di Linux dari bash. Get-ChildItem Cmdlet menghasilkan teks yang dihiasi ANSI. Karena pengalihan terjadi dalam bash proses, di luar host PowerShell, output tidak terpengaruh oleh OutputRendering.

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

Saat Anda memeriksa konten out.txt Anda melihat urutan escape ANSI.

Sebaliknya, ketika pengalihan terjadi dalam sesi PowerShell, OutputRendering memengaruhi output yang dialihkan.

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

Saat Anda memeriksa konten out.txt tidak ada urutan escape ANSI.

Menonaktifkan output ANSI

Dukungan untuk urutan escape ANSI dapat dinonaktifkan menggunakan term atau variabel lingkungan NO_COLOR.

Nilai $env:TERM berikut mengubah perilaku sebagai berikut:

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

Jika $env:NO_COLOR ada, maka $PSStyle.OutputRendering diatur ke PlainText. Untuk informasi selengkapnya tentang variabel lingkungan NO_COLOR , lihat https://no-color.org/.

Menggunakan $PSStyle dari C#

Pengembang C# dapat mengakses PSStyle sebagai singleton, seperti yang ditunjukkan dalam contoh berikut:

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

PSStyle ada di namespace System.Management.Automation.

Mesin PowerShell menyertakan perubahan berikut:

  • Sistem pemformatan PowerShell diperbarui untuk menghormati $PSStyle.OutputRendering.
  • StringDecorated Jenis ditambahkan untuk menangani string ANSI yang lolos.
  • Properti string IsDecorated boolean ditambahkan untuk mengembalikan true ketika string berisi ESC atau C1 CSI urutan karakter.
  • Properti Length string mengembalikan panjang untuk teks tanpa urutan escape ANSI.
  • Metode mengembalikan StringDecorated Substring(int contentLength) substring yang dimulai pada indeks 0 hingga panjang konten yang bukan merupakan bagian dari urutan escape ANSI. Ini diperlukan untuk pemformatan tabel untuk memotong string dan mempertahankan urutan escape ANSI yang tidak memakan ruang karakter yang dapat dicetak.
  • Metode string ToString() tetap sama dan mengembalikan versi teks biasa dari string.
  • Metode mengembalikan string ToString(bool Ansi) string ansi mentah yang disematkan jika Ansi parameternya benar. Jika tidak, versi teks biasa dengan urutan escape ANSI dihapus dikembalikan.
  • Metode mengembalikan FormatHyperlink(string text, uri link) string yang berisi urutan escape ANSI yang digunakan untuk menghias hyperlink. Beberapa host terminal, seperti Terminal Windows, mendukung markup ini, yang membuat teks yang dirender dapat diklik di terminal.

Metode statis kelas PSStyle

PowerShell 7.4 menambahkan tiga metode statis baru ke [System.Management.Automation.PSStyle] kelas .

[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)

Metode ini menyediakan cara untuk mengonversi nilai ConsoleColor ke urutan escape ANSI untuk warna latar depan dan latar belakang atau untuk kombinasi keduanya.

Contoh berikut menunjukkan urutan escape ANSI yang dihasilkan oleh metode ini.

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

Lihat juga