Поделиться через


about_ANSI_Terminals

Краткое описание

Описывает поддержку для escape-последовательностей ANSI в PowerShell.

Подробное описание

PowerShell имеет множество функций, поддерживающих использование escape-последовательностей ANSI для управления отрисовкой выходных данных в приложении терминала, в котором размещена PowerShell.

PowerShell 7.2 добавила новую автоматическую переменную $PSStyleи изменения в подсистеме PowerShell для поддержки выходных данных текста, украшенного ANSI.

Поддержка терминала ANSI

Функции ANSI предназначены для обеспечения совместимости с терминалами на основе xterm. Дополнительные сведения см. в разделе xterm в Википедии.

В Windows 10 и более поздних версиях узел консоли Windows совместим с xterm. Приложение Терминал Windows также совместимо с xterm.

В macOS приложение терминала по умолчанию совместимо с xterm.

Для Linux каждый дистрибутив поставляется с другим приложением терминала. Ознакомьтесь с документацией по распространению, чтобы найти подходящее приложение терминала.

$PSStyle

Переменная имеет следующие свойства:

  • Сброс — выключение всех украшений
  • Мигание — включение мигания
  • BlinkOff — отключает мигание
  • Полужирный — включает полужирный
  • BoldOff — отключает полужирный
  • Dim — включение Dim (добавлено в PowerShell 7.4)
  • DimOff — отключает Dim (добавлено в PowerShell 7.4)
  • Скрытый — включает скрытый
  • HiddenOff — отключает скрытые
  • Обратный — включает обратный
  • ReverseOff — отключает обратный режим
  • Курсив — превращает курсив на
  • Курсив - Превращает курсив
  • Подчеркивание . Включает подчеркивание
  • Подчеркивание. Отключает подчеркивание
  • Зачеркнутый - Поворот удара по
  • StrikethroughOff - Превращается удар покинуть
  • OutputRendering — управление при использовании отрисовки выходных данных
  • Форматирование — вложенный объект, который управляет форматированием по умолчанию для выходных потоков
  • Progress — вложенный объект, который управляет отрисовкой индикаторов хода выполнения
  • FileInfo — вложенный объект для управления цветом объектов FileInfo.
  • Передний план — вложенный объект для управления цветом переднего плана
  • Фон — вложенный объект для управления цветом фона

Базовые элементы возвращают строки escape-последовательностей ANSI, сопоставленные с их именами. Значения можно настраивать. Например, можно изменить полужирный шрифт на подчеркнутую. Имена свойств упрощают создание украшенных строк с помощью завершения табуляции:

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

Следующие члены управляют тем, как используется форматирование ANSI.

  • $PSStyle.OutputRendering перечисление System.Management.Automation.OutputRendering со значениями:

    • ANSI: escape-последовательности ANSI всегда передаются через как есть.

      Внимание

      При перенаправлении выходных данных в файл или конвейер, предназначенный для выполнения ниже, следует использовать режим ANSI . Это гарантирует, что выходные данные не изменяются. При использовании любого другого режима выходные данные изменяются путем удаления escape-последовательностей ANSI, которые могут изменить поведение выполнения.

    • PlainText: escape-последовательности ANSI всегда удаляются таким образом, чтобы он был только обычным текстом. В удаленных сеансах, если для удаленного узла задано PlainTextзначение, выходные данные будут удалены из escape-последовательностей ANSI перед отправкой обратно в локальный клиент.

    • Host: это поведение по умолчанию. Escape-последовательности ANSI удаляются из перенаправленных или каналов выходных данных. Дополнительные сведения см. в разделе "Перенаправление выходных данных".

  • $PSStyle.Foreground Элементы $PSStyle.Background — это строки, содержащие escape-последовательности ANSI для 16 стандартных цветов консоли.

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

    Значения задаются и могут содержать любое количество escape-последовательностей ANSI. Существует также FromRgb() метод для указания 24-разрядного цвета. Метод можно вызвать FromRgb() двумя способами.

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

    Любой из следующих примеров задает цвет фона 24-разрядного цвета Beige.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting — это вложенный объект для управления форматированием по умолчанию отладочных, ошибок, подробных сообщений, предупреждений и заголовков таблиц и списков. Вы также можете управлять атрибутами, такими как полужирный и подчеркивание. Он заменяет $Host.PrivateData способ управления цветами для отрисовки форматирования. $Host.PrivateData продолжает существовать для обратной совместимости, но не подключен к $PSStyle.Formatting. $PSStyle.Formatting имеет следующие члены:

    • FormatAccent — форматирование элементов списка
    • ErrorAccent — форматирование метаданных ошибки
    • Ошибка — форматирование сообщений об ошибках
    • Предупреждение — форматирование предупреждений
    • Подробное форматирование для подробных сообщений
    • Отладка — форматирование сообщений отладки
    • TableHeader — форматирование заголовков таблиц
    • CustomTableHeaderLabel — форматирование заголовков таблиц, которые не являются фактически свойствами объекта
    • FeedbackName — форматирование имени поставщика отзывов (добавлено в качестве экспериментальной функции в PowerShell 7.4)
    • FeedbackText — форматирование сообщений отзывов (добавлено в качестве экспериментальной функции в PowerShell 7.4)
    • FeedbackAction — форматирование предлагаемых поставщиком отзывов действий (добавлено в качестве экспериментальной функции в PowerShell 7.4)
  • $PSStyle.Progress позволяет управлять отрисовкой панели представления хода выполнения.

    • Стиль — строка ANSI, задающая стиль отрисовки.
    • MaxWidth — задает максимальную ширину представления. По умолчанию — 120. Минимальное значение равно 18.
    • Представление — перечисление со значениями Minimal и Classic. Classic — существующий рендеринг без изменений. Minimal — минимальный рендеринг одной строки. Значение по умолчанию — Minimal.
    • UseOSCIndicator — по умолчанию $false. Установите это значение $true для терминалов, поддерживающих индикаторы OSC.

    Примечание.

    Если узел не поддерживает виртуальный терминал, для $PSStyle.Progress.View автоматически устанавливается значение Classic.

    В следующем примере стиль отрисовки устанавливается на минимальную индикатор выполнения.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo — вложенный объект для управления цветом объектов FileInfo .

    • Каталог — встроенный элемент, указывающий цвет для каталогов
    • Символьная ссылка — встроенный элемент, указывающий цвет символьных ссылок
    • Исполняемый файл — встроенный элемент, указывающий цвет исполняемых файлов.
    • Расширение — используйте этот элемент для определения цветов для разных расширений файлов. Элемент Расширения изначально включает расширения для файлов архива и PowerShell.

Командлеты, создающие выходные данные ANSI

Перенаправление выходных данных в Host режиме

По умолчанию $PSStyle.OutputRendering для узла задано значение Host. Escape-последовательности ANSI удаляются из перенаправленных или каналов выходных данных.

OutputRendering применяется только к отрисовке в узле и Out-StringOut-File. Выходные данные из собственных исполняемых файлов не затрагиваются.

PowerShell 7.2.6 изменил поведение Out-File и Out-String для следующих сценариев:

  • Если входной объект является чистой строкой, эти командлеты сохраняют строку без изменений независимо от параметра OutputRendering .
  • Если входной объект должен применить к нему представление форматирования, эти командлеты сохраняют или удаляют escape-последовательности из выходных строк форматирования на основе параметра OutputRendering .

Это критическое изменение в этих командлетах по сравнению с PowerShell 7.2.

OutputRendering не применяется к выходным данным из процесса узла PowerShell, например при запуске pwsh из командной строки и перенаправлении выходных данных.

В следующем примере PowerShell выполняется в Linux из bash. Командлет Get-ChildItem создает украшенный ANSI текст. Так как перенаправление происходит в bash процессе за пределами узла PowerShell, выходные данные не влияют на outputRendering.

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

При проверке содержимого out.txt отображаются escape-последовательности ANSI.

В отличие от этого, когда перенаправление происходит в сеансе PowerShell, outputRendering влияет на перенаправленные выходные данные.

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

При проверке содержимого out.txt не существует escape-последовательностей ANSI.

Отключение выходных данных ANSI

Поддержку escape-последовательностей ANSI можно отключить с помощью переменных среды TERM или NO_COLOR.

Следующие значения $env:TERM изменяют поведение следующим образом:

  • dumb -Задает $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -Задает $PSStyle.OutputRendering = PlainText
  • xtermm -Задает $PSStyle.OutputRendering = PlainText

Если $env:NO_COLOR существует, $PSStyle.OutputRendering то для объекта PlainText задано значение "Обычный текст". Дополнительные сведения об переменной среды NO_COLOR см. в статье https://no-color.org/.

Использование $PSStyle из C#

Разработчики C# могут получить доступ PSStyle к одному, как показано в следующем примере:

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

PSStyle существует в пространстве имен System.Management.Automation.

Подсистема PowerShell включает следующие изменения:

  • Система форматирования PowerShell обновляется в соответствии с $PSStyle.OutputRendering.
  • Тип StringDecorated добавляется для обработки escape-строк ANSI.
  • string IsDecorated Логическое свойство было добавлено для возврата true, когда строка содержит ESC или C1 CSI последовательности символов.
  • Свойство Length строки возвращает длину текста без escape-последовательностей ANSI.
  • Метод StringDecorated Substring(int contentLength) возвращает подстроку, начиная с индекса 0 до длины содержимого, которая не является частью escape-последовательностей ANSI. Это необходимо для усечения строк и сохранения escape-последовательностей ANSI, которые не занимают место печатаемых символов, при форматировании таблицы.
  • Метод string ToString() остается неизменным и возвращает версию строки с открытым текстом.
  • Метод string ToString(bool Ansi) возвращает необработанную внедренную строку ANSI, если Ansi параметр имеет значение true. В противном случае возвращается версия с открытым текстом с удаленными escape-последовательностями ANSI.
  • Метод FormatHyperlink(string text, uri link) возвращает строку, содержащую escape-последовательности ANSI, используемые для декорирования гиперссылок. Некоторые узлы терминала, например Терминал Windows, поддерживают такую разметку, которая позволяет щелкать отображаемый в терминале текст.

Статические методы класса PSStyle

PowerShell 7.4 добавляет три новых статических метода в [System.Management.Automation.PSStyle] класс.

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

Эти методы позволяют преобразовать значения ConsoleColor в escape-последовательности ANSI для переднего плана и фона или для сочетания обоих.

В следующих примерах показаны escape-последовательности ANSI, созданные этими методами.

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

См. также