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


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 — отключение полужирного
  • Скрытый — включает скрытые
  • HiddenOff — отключение скрытого
  • Обратный — включает обратный
  • ReverseOff — отключает обратный
  • Курсив — курсив
  • ItalicOff — отключает курсив
  • Подчеркивание — включение подчеркивания
  • Подчеркивание— выключает подчеркивание.
  • Strikethrough — включение зачеркивной
  • StrikethroughOff — отключает забастовку
  • OutputRendering — управление отрисовкой выходных данных
  • Форматирование — вложенный объект, который управляет форматированием по умолчанию для выходных потоков.
  • Progress — вложенный объект, управляющий отображением индикаторов выполнения.
  • FileInfo — вложенный объект для управления цветом объектов FileInfo .
  • Передний план — вложенный объект для управления цветом переднего плана
  • Background — вложенный объект для управления цветом фона

Базовые элементы возвращают строки 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 всегда удаляются, чтобы это был только обычный текст.

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

  • Элементы $PSStyle.Background и $PSStyle.Foreground — это строки, содержащие 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 — форматирование элементов списка
    • TableHeader — форматирование заголовков таблиц
    • ErrorAccent — форматирование метаданных ошибки
    • Ошибка — форматирование сообщений об ошибках
    • Предупреждение — форматирование предупреждающих сообщений
    • Подробное форматирование для подробных сообщений
    • Отладка — форматирование сообщений отладки
  • $PSStyle.Progress позволяет управлять отображением индикатора хода выполнения.

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

    Примечание

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

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

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

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

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

  • Командлеты Markdown — командлет Show-Markdown отображает содержимое файла, содержащего текст Markdown. Выходные данные отображаются с помощью последовательностей ANSI для представления различных стилей. Определениями стилей можно управлять с помощью командлетов Get-MarkdownOption и Set-MarkdownOption .
  • Командлеты PSReadLine— модуль PSReadLine использует последовательности ANSI для цветом элементов синтаксиса PowerShell в командной строке. Цветами можно управлять с помощью командлетов Get-PSReadLineOption и Set-PSReadLineOption.
  • Get-Error — командлет Get-Error возвращает подробное представление объекта Error , отформатированное для упрощения чтения.
  • Select-String — Начиная с PowerShell 7.0 , Select-String использует последовательности ANSI для выделения соответствующих шаблонов в выходных данных.
  • Write-Progress — Управление выходными данными ANSI осуществляется с помощью $PSStyle.Progress, как описано выше. Дополнительные сведения см. в разделе О ходе записи.

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

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

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

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 добавляется для обработки экранированных строк 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, поддерживают такую разметку, которая позволяет щелкать отображаемый в терминале текст.

См. также раздел